diff --git a/.buildkite/ftr_platform_stateful_configs.yml b/.buildkite/ftr_platform_stateful_configs.yml index 96c15cce513c6..71ba8932271e8 100644 --- a/.buildkite/ftr_platform_stateful_configs.yml +++ b/.buildkite/ftr_platform_stateful_configs.yml @@ -35,10 +35,6 @@ disabled: - x-pack/test/fleet_cypress/config.ts - x-pack/test/fleet_cypress/visual_config.ts - # http/2 security muted tests - - x-pack/test/security_functional/saml.http2.config.ts - - x-pack/test/security_functional/oidc.http2.config.ts - defaultQueue: 'n2-4-spot' enabled: - test/accessibility/config.ts @@ -326,6 +322,8 @@ enabled: - x-pack/test/security_functional/login_selector.config.ts - x-pack/test/security_functional/oidc.config.ts - x-pack/test/security_functional/saml.config.ts + - x-pack/test/security_functional/saml.http2.config.ts + - x-pack/test/security_functional/oidc.http2.config.ts - x-pack/test/security_functional/insecure_cluster_warning.config.ts - x-pack/test/security_functional/user_profiles.config.ts - x-pack/test/security_functional/expired_session.config.ts diff --git a/.buildkite/scripts/common/util.sh b/.buildkite/scripts/common/util.sh index bd924e95f0bcf..445871e6420bd 100755 --- a/.buildkite/scripts/common/util.sh +++ b/.buildkite/scripts/common/util.sh @@ -36,7 +36,7 @@ check_for_changed_files() { GIT_CHANGES="$(git status --porcelain -- . ':!:.bazelrc' ':!:config/node.options' ':!config/kibana.yml')" if [ "$GIT_CHANGES" ]; then - if ! is_auto_commit_disabled && [[ "$SHOULD_AUTO_COMMIT_CHANGES" == "true" && "${BUILDKITE_PULL_REQUEST:-}" ]]; then + if ! is_auto_commit_disabled && [[ "$SHOULD_AUTO_COMMIT_CHANGES" == "true" && "${BUILDKITE_PULL_REQUEST:-}" != "" && "${BUILDKITE_PULL_REQUEST}" != "false" ]]; then NEW_COMMIT_MESSAGE="[CI] Auto-commit changed files from '$1'" PREVIOUS_COMMIT_MESSAGE="$(git log -1 --pretty=%B)" diff --git a/.buildkite/scripts/steps/code_generation/security_solution_codegen.sh b/.buildkite/scripts/steps/code_generation/security_solution_codegen.sh index 63ed00a3513f9..ef4d69b2a295e 100755 --- a/.buildkite/scripts/steps/code_generation/security_solution_codegen.sh +++ b/.buildkite/scripts/steps/code_generation/security_solution_codegen.sh @@ -6,22 +6,16 @@ source .buildkite/scripts/common/util.sh echo --- Security Solution OpenAPI Code Generation -echo -e "\n[Security Solution OpenAPI Code Generation] OpenAPI Common Package" - +echo -e "\n[Security Solution OpenAPI Code Generation] OpenAPI Common Package\n" (cd packages/kbn-openapi-common && yarn openapi:generate) -check_for_changed_files "yarn openapi:generate" true echo -e "\n[Security Solution OpenAPI Code Generation] Lists Common Package\n" - (cd packages/kbn-securitysolution-lists-common && yarn openapi:generate) -check_for_changed_files "yarn openapi:generate" true - -echo -e "\n[Security Solution OpenAPI Code Generation] Exceptions Common Package" +echo -e "\n[Security Solution OpenAPI Code Generation] Exceptions Common Package\n" (cd packages/kbn-securitysolution-exceptions-common && yarn openapi:generate) -check_for_changed_files "yarn openapi:generate" true - -echo -e "\n[Security Solution OpenAPI Code Generation] Security Solution Plugin" +echo -e "\n[Security Solution OpenAPI Code Generation] Security Solution Plugin\n" (cd x-pack/plugins/security_solution && yarn openapi:generate) + check_for_changed_files "yarn openapi:generate" true \ No newline at end of file diff --git a/.buildkite/scripts/steps/openapi_bundling/security_solution_openapi_bundling.sh b/.buildkite/scripts/steps/openapi_bundling/security_solution_openapi_bundling.sh index 91ee63ab11185..798c3cdbb9b76 100755 --- a/.buildkite/scripts/steps/openapi_bundling/security_solution_openapi_bundling.sh +++ b/.buildkite/scripts/steps/openapi_bundling/security_solution_openapi_bundling.sh @@ -7,36 +7,27 @@ source .buildkite/scripts/common/util.sh echo --- Security Solution OpenAPI Bundling echo -e "\n[Security Solution OpenAPI Bundling] Detections API\n" - (cd x-pack/plugins/security_solution && yarn openapi:bundle:detections) -check_for_changed_files "yarn openapi:bundle:detections" true -echo -e "\n[Security Solution OpenAPI Bundling] Entity Analytics API\n" +echo -e "\n[Security Solution OpenAPI Bundling] Timeline API\n" +(cd x-pack/plugins/security_solution && yarn openapi:bundle:timeline) +echo -e "\n[Security Solution OpenAPI Bundling] Entity Analytics API\n" (cd x-pack/plugins/security_solution && yarn openapi:bundle:entity-analytics) -check_for_changed_files "yarn openapi:bundle:entity-analytics" true echo -e "\n[Security Solution OpenAPI Bundling] Lists API\n" - -echo -e "\n[Security Solution OpenAPI Bundling] Endpoint Management API\n" - -(cd x-pack/plugins/security_solution && yarn openapi:bundle:endpoint-management) -check_for_changed_files "yarn openapi:bundle:endpoint-management" true - (cd packages/kbn-securitysolution-lists-common && yarn openapi:bundle) -check_for_changed_files "yarn openapi:bundle" true echo -e "\n[Security Solution OpenAPI Bundling] Exceptions API\n" - (cd packages/kbn-securitysolution-exceptions-common && yarn openapi:bundle) -check_for_changed_files "yarn openapi:bundle" true -echo -e "\n[Security Solution OpenAPI Bundling] Elastic Assistant API\n" +echo -e "\n[Security Solution OpenAPI Bundling] Endpoint Management API\n" +(cd x-pack/plugins/security_solution && yarn openapi:bundle:endpoint-management) +echo -e "\n[Security Solution OpenAPI Bundling] Elastic Assistant API\n" (cd x-pack/packages/kbn-elastic-assistant-common && yarn openapi:bundle) -check_for_changed_files "yarn openapi:bundle" true echo -e "\n[Security Solution OpenAPI Bundling] Osquery API\n" - (cd x-pack/plugins/osquery && yarn openapi:bundle) + check_for_changed_files "yarn openapi:bundle" true diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5d6f6a2e43147..d7055dbca4f44 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -46,6 +46,7 @@ x-pack/plugins/observability_solution/apm/ftr_e2e @elastic/obs-ux-infra_services x-pack/plugins/observability_solution/apm @elastic/obs-ux-infra_services-team packages/kbn-apm-synthtrace @elastic/obs-ux-infra_services-team @elastic/obs-ux-logs-team packages/kbn-apm-synthtrace-client @elastic/obs-ux-infra_services-team @elastic/obs-ux-logs-team +packages/kbn-apm-types @elastic/obs-ux-infra_services-team packages/kbn-apm-utils @elastic/obs-ux-infra_services-team test/plugin_functional/plugins/app_link_test @elastic/kibana-core x-pack/test/usage_collection/plugins/application_usage_test @elastic/kibana-core @@ -376,7 +377,6 @@ packages/kbn-discover-utils @elastic/kibana-data-discovery packages/kbn-doc-links @elastic/docs packages/kbn-docs-utils @elastic/kibana-operations packages/kbn-dom-drag-drop @elastic/kibana-visualizations @elastic/kibana-data-discovery -packages/analytics/ebt @elastic/kibana-core packages/kbn-ebt-tools @elastic/kibana-core x-pack/packages/security-solution/ecs_data_quality_dashboard @elastic/security-threat-hunting-explore x-pack/plugins/ecs_data_quality_dashboard @elastic/security-threat-hunting-explore @@ -451,7 +451,7 @@ src/plugins/field_formats @elastic/kibana-data-discovery packages/kbn-field-types @elastic/kibana-data-discovery packages/kbn-field-utils @elastic/kibana-data-discovery x-pack/plugins/fields_metadata @elastic/obs-ux-logs-team -x-pack/plugins/file_upload @elastic/kibana-gis +x-pack/plugins/file_upload @elastic/kibana-gis @elastic/ml-ui examples/files_example @elastic/appex-sharedux src/plugins/files_management @elastic/appex-sharedux src/plugins/files @elastic/appex-sharedux @@ -875,9 +875,9 @@ packages/kbn-test-eui-helpers @elastic/kibana-visualizations x-pack/test/licensing_plugin/plugins/test_feature_usage @elastic/kibana-security packages/kbn-test-jest-helpers @elastic/kibana-operations @elastic/appex-qa packages/kbn-test-subj-selector @elastic/kibana-operations @elastic/appex-qa -x-pack/test_serverless @elastic/appex-qa -test @elastic/appex-qa -x-pack/test @elastic/appex-qa +x-pack/test_serverless +test +x-pack/test x-pack/performance @elastic/appex-qa x-pack/examples/testing_embedded_lens @elastic/kibana-visualizations packages/kbn-text-based-editor @elastic/kibana-esql @@ -1263,7 +1263,6 @@ x-pack/test/observability_ai_assistant_functional @elastic/obs-ai-assistant /test/functional/services/remote @elastic/appex-qa /test/visual_regression @elastic/appex-qa /x-pack/test/visual_regression @elastic/appex-qa -/x-pack/performance @elastic/appex-qa /packages/kbn-test/src/functional_test_runner @elastic/appex-qa /packages/kbn-performance-testing-dataset-extractor @elastic/appex-qa /x-pack/test_serverless/**/*config.base.ts @elastic/appex-qa @@ -1273,7 +1272,7 @@ x-pack/test/observability_ai_assistant_functional @elastic/obs-ai-assistant /x-pack/test_serverless/api_integration/test_suites/common/elasticsearch_api @elastic/appex-qa /x-pack/test_serverless/functional/test_suites/security/ftr/ @elastic/appex-qa /x-pack/test_serverless/functional/test_suites/common/home_page/ @elastic/appex-qa -/x-pack/test_serverless/functional/services/ @elastic/appex-qa +/x-pack/test_serverless/**/services/ @elastic/appex-qa # Core /config/ @elastic/kibana-core @@ -1741,8 +1740,9 @@ packages/react @elastic/appex-sharedux /plugins/data_views/docs/openapi @elastic/platform-docs oas_docs/.spectral.yaml @elastic/platform-docs oas_docs/kibana.info.serverless.yaml @elastic/platform-docs -oas_docs/kibana.serverless.yaml @elastic/platform-docs +oas_docs/kibana.info.yaml @elastic/platform-docs oas_docs/makefile @elastic/platform-docs +oas_docs/overlays @elastic/platform-docs # Plugin manifests /src/plugins/**/kibana.jsonc @elastic/kibana-core diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index f9f6f8053f27a..63847b91b45ce 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-07-30 +date: 2024-08-01 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 125e22e18cde9..c394dade7b1a7 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-07-30 +date: 2024-08-01 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 7f65254e90dca..e011f3cf5c85a 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.devdocs.json b/api_docs/aiops.devdocs.json index 770e4d7b465c1..47928bc65edd2 100644 --- a/api_docs/aiops.devdocs.json +++ b/api_docs/aiops.devdocs.json @@ -241,23 +241,11 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; }" ], "path": "x-pack/plugins/aiops/public/hooks/use_aiops_app_context.ts", diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 12bf9d768cd4e..195d461850caa 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-07-30 +date: 2024-08-01 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 0e5bc21bff8ed..e99c9cbc5265d 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-07-30 +date: 2024-08-01 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 415ba28bafeb6..f2bf80672c8de 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-07-30 +date: 2024-08-01 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 991ce6f84e645..e41ed73fa4b8d 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index a0e6256c8d8b7..7af6e6386bd64 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-07-30 +date: 2024-08-01 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 f3ab70815f725..fdb3e920c2bd1 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-07-30 +date: 2024-08-01 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 968f15067118c..a9a8766c35ad3 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-07-30 +date: 2024-08-01 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 980d9fb017d26..68bf18b3f9b48 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-07-30 +date: 2024-08-01 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 2fd673d90e831..a1e73caae4304 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-07-30 +date: 2024-08-01 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 27e58be4d7e29..5264a27e8d44f 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-07-30 +date: 2024-08-01 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 99770f39d446e..d1dfcc350a094 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-07-30 +date: 2024-08-01 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 3db0046145d01..759ca5892ce4b 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-07-30 +date: 2024-08-01 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 c36d36c08fbdb..5eaca11ad270a 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-07-30 +date: 2024-08-01 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 4bf4b913c9e8a..2fea3205a50fd 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-07-30 +date: 2024-08-01 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 7f2f5afd7dd73..6b948f6657a03 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 288753ed26d41..32de7c9e2c00f 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-07-30 +date: 2024-08-01 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 4cd755b6511a5..7b35543c77910 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-07-30 +date: 2024-08-01 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 d19823f155238..46750afc630b2 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-07-30 +date: 2024-08-01 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 efc1d7008d8e7..57c0cd4d7464c 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-07-30 +date: 2024-08-01 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 29ee050173470..fed2ea68670d1 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 4515e8e12a01a..a57f0edbc2092 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-07-30 +date: 2024-08-01 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 29425a30fa00b..3595c44c72919 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 5b190cb67de7a..428236b2c71ab 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 99b59e02d4857..441470e2e3fc6 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-07-30 +date: 2024-08-01 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 b4e1b2b4d2588..9208e4135958b 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-07-30 +date: 2024-08-01 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 66a1b6d2ee581..da8cae9763b85 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-07-30 +date: 2024-08-01 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 0f2ef6fffde3f..f1e246efa1fa5 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-07-30 +date: 2024-08-01 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 a46b14e6355fa..f088a1dd40d4b 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-07-30 +date: 2024-08-01 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 acdc22352adc2..dd78e6a4f4103 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-07-30 +date: 2024-08-01 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 166787c47a58f..1c55fbfac4067 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-07-30 +date: 2024-08-01 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 a1921090be7a5..74420ce858df1 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-07-30 +date: 2024-08-01 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 4e99aa8e77cdc..28ad1dbce6567 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -68,7 +68,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | @kbn/monaco, securitySolution | - | | | fleet, cloudSecurityPosture, exploratoryView, osquery, synthetics | - | -| | alerting, observabilityAIAssistant, fleet, cloudSecurityPosture, enterpriseSearch, serverlessSearch, transform, upgradeAssistant, apm, entityManager, observabilityOnboarding, synthetics, security | - | +| | alerting, observabilityAIAssistant, fleet, cloudSecurityPosture, enterpriseSearch, serverlessSearch, transform, upgradeAssistant, apm, entityManager, synthetics, security | - | | | spaces, navigation, cloudChat | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, spaces, savedSearch, visualizations, lens, cases, maps, canvas, graph | - | | | spaces, savedObjectsManagement | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index d8adf816f21da..288d9092d1011 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1148,7 +1148,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/observability_onboarding/public/plugin.ts#:~:text=CloudExperimentsPluginStart), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/public/plugin.ts#:~:text=CloudExperimentsPluginStart) | - | -| | [route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/server/routes/flow/route.ts#:~:text=authc), [route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/server/routes/flow/route.ts#:~:text=authc) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts#:~:text=legacy) | - | @@ -1378,8 +1377,8 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps) | - | | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields) | - | -| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [use_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx#:~:text=BrowserField), [use_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx#:~:text=BrowserField)+ 29 more | - | -| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields)+ 77 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [use_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx#:~:text=BrowserField), [use_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx#:~:text=BrowserField), [use_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx#:~:text=BrowserField), [use_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx#:~:text=BrowserField), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=BrowserField)+ 29 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields)+ 75 more | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyRequest), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyRequest) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyResponse), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyResponse) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index f095c84634f47..8a86e1833baf5 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index fa026a29908a5..ab1606c9c1b35 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 2f5a53ec57b1c..5aa625a2605a2 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 927b5a99af4c1..16c642b6eb6f6 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-07-30 +date: 2024-08-01 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 81bc4cacdda23..751c4e48ea500 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-07-30 +date: 2024-08-01 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 208831b2c437d..cc376175ae9d6 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 231ef97db2c75..b049637feb903 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 5c17a021fed4f..8fc543875542e 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-07-30 +date: 2024-08-01 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 21ef9064f44dc..b999041af5f87 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-07-30 +date: 2024-08-01 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 9be42a4f17aa6..6602d24d2c96a 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-07-30 +date: 2024-08-01 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 681fbc0b54e22..a8e98c12ba6dc 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entity_manager.devdocs.json b/api_docs/entity_manager.devdocs.json index 145b8f97ff63a..0ec36023ac35f 100644 --- a/api_docs/entity_manager.devdocs.json +++ b/api_docs/entity_manager.devdocs.json @@ -1,7 +1,64 @@ { "id": "entityManager", "client": { - "classes": [], + "classes": [ + { + "parentPluginId": "entityManager", + "id": "def-public.EntityManagerUnauthorizedError", + "type": "Class", + "tags": [], + "label": "EntityManagerUnauthorizedError", + "description": [], + "signature": [ + { + "pluginId": "entityManager", + "scope": "public", + "docId": "kibEntityManagerPluginApi", + "section": "def-public.EntityManagerUnauthorizedError", + "text": "EntityManagerUnauthorizedError" + }, + " extends Error" + ], + "path": "x-pack/plugins/observability_solution/entity_manager/public/lib/errors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "entityManager", + "id": "def-public.EntityManagerUnauthorizedError.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/entity_manager/public/lib/errors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "entityManager", + "id": "def-public.EntityManagerUnauthorizedError.Unnamed.$1", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/entity_manager/public/lib/errors.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "functions": [], "interfaces": [ { @@ -152,21 +209,6 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, - { - "parentPluginId": "entityManager", - "id": "def-public.ERROR_USER_NOT_AUTHORIZED", - "type": "string", - "tags": [], - "label": "ERROR_USER_NOT_AUTHORIZED", - "description": [], - "signature": [ - "\"user_not_authorized\"" - ], - "path": "x-pack/plugins/observability_solution/entity_manager/common/errors.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 1ec7efb0d2995..a992b1003346c 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 14 | 0 | 14 | 1 | +| 16 | 0 | 16 | 1 | ## Client +### Classes + + ### Interfaces diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index dbfe2f97c790b..71c411556774d 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index f3c8708fb939b..a2748717e7797 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 4017b8012b718..e54bb5fc6a5ac 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 581ff697067e8..25b3e02bbf6f8 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-07-30 +date: 2024-08-01 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 81ade58037ba8..15468790f84c0 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-07-30 +date: 2024-08-01 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 3f1a43d99d0b9..5821e5f1419ed 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index ce8b8148533dd..9792e5ebb1b52 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-07-30 +date: 2024-08-01 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 0971c57316b4b..b5aae123ab9ff 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-07-30 +date: 2024-08-01 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 d44a7ee5fad5f..f22a8cf506f62 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-07-30 +date: 2024-08-01 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 6d81cb17422ca..448bc3fb19e3b 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-07-30 +date: 2024-08-01 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 c9460498ceb47..556131a8d7615 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-07-30 +date: 2024-08-01 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 71aebfdc9d30c..ce438cf419458 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-07-30 +date: 2024-08-01 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 a36ca13f9886a..20bde4fd07615 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-07-30 +date: 2024-08-01 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 63e29e1cc67fd..797174c8c51e2 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-07-30 +date: 2024-08-01 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 2e8e55fed1881..c411b83bf2264 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-07-30 +date: 2024-08-01 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 54390ab63b223..2f42031faffc4 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-07-30 +date: 2024-08-01 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 679251f02e207..1361c95024c9b 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-07-30 +date: 2024-08-01 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 38ab19ae413d5..33dfed0238c32 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-07-30 +date: 2024-08-01 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 86931a3ccb354..53774caf41650 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-07-30 +date: 2024-08-01 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 c22f15668cd51..f740830bbc277 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-07-30 +date: 2024-08-01 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 ecb6884ac929c..3493e67dac2be 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-07-30 +date: 2024-08-01 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 f27b224f2d8c3..15a8a1cd216d4 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-07-30 +date: 2024-08-01 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 758b4097b5306..2becb2f032a4a 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 3122a379c8b5d..320f5dc8d5309 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index fb3c2c8e046f4..9fdad3660c5a8 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.devdocs.json b/api_docs/files.devdocs.json index f66d17574d9a0..f3cc7d80e6a15 100644 --- a/api_docs/files.devdocs.json +++ b/api_docs/files.devdocs.json @@ -5400,6 +5400,10 @@ "plugin": "cases", "path": "x-pack/plugins/cases/server/files/index.test.ts" }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/server/files/index.test.ts" + }, { "plugin": "cases", "path": "x-pack/plugins/cases/server/files/index.test.ts" diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 5dc5362b1665d..06ef242784597 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-07-30 +date: 2024-08-01 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 bdbbcc5a56ac2..0072e379a6e71 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-07-30 +date: 2024-08-01 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 cc67ace3fde26..253c0ede31062 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-07-30 +date: 2024-08-01 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 6fd03482a1dd2..20c4709a63922 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-07-30 +date: 2024-08-01 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 9efc9d8eea0b5..82eee29554ece 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-07-30 +date: 2024-08-01 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 31878107d0bfa..3b1cc59bea371 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-07-30 +date: 2024-08-01 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 c599740eb016f..a6cc03bf651eb 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-07-30 +date: 2024-08-01 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 4fbffc14611df..b7e563d27be89 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-07-30 +date: 2024-08-01 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 24b423e414ef1..10d933d6cd889 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-07-30 +date: 2024-08-01 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 f30a8dcc31bff..10cbfdcf942fa 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-07-30 +date: 2024-08-01 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 fabb962ccb942..e915faf2f275e 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-07-30 +date: 2024-08-01 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 682d551b55336..8555a637ffc45 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 167d3394ee4c6..692fde1f7aafe 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index a52fb54ca6b68..0aee1d54c30c4 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 8c73c72169827..e4643bad9f7b0 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 2585fb04b3f46..f9e29e443d87d 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 121690c37f47f..7dd19612397d4 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-07-30 +date: 2024-08-01 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 e252d9d69885b..6954cd0e26860 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-07-30 +date: 2024-08-01 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 3c397798f9322..391edd1e088f2 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-07-30 +date: 2024-08-01 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 ff2cc18428888..20e746c4d1359 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-07-30 +date: 2024-08-01 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 afb53e5878408..f37e270544a74 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-07-30 +date: 2024-08-01 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 d1b33fa4aded8..5dd2cf1d579a4 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-07-30 +date: 2024-08-01 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_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index dc7302665f847..7de325c712393 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index b3a166274f3d9..2ca543e2868b2 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-07-30 +date: 2024-08-01 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 285b133e2d77c..0dc5d17ebfeea 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-07-30 +date: 2024-08-01 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 05cb78fa08362..9557f500103ef 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-07-30 +date: 2024-08-01 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_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index b927c515dce19..bebd66657c5d2 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 9780b17f63827..b5418d1b665c9 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-07-30 +date: 2024-08-01 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 99d60ea0d8670..97c3e909391a7 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index a5de950609fdb..c36b701433393 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.devdocs.json b/api_docs/kbn_apm_config_loader.devdocs.json index 81ea00f3dac6d..3af68277a32ea 100644 --- a/api_docs/kbn_apm_config_loader.devdocs.json +++ b/api_docs/kbn_apm_config_loader.devdocs.json @@ -9,18 +9,10 @@ "objects": [] }, "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { "classes": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration", + "id": "def-server.ApmConfiguration", "type": "Class", "tags": [], "label": "ApmConfiguration", @@ -31,7 +23,7 @@ "children": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration.Unnamed", + "id": "def-server.ApmConfiguration.Unnamed", "type": "Function", "tags": [], "label": "Constructor", @@ -45,7 +37,7 @@ "children": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration.Unnamed.$1", + "id": "def-server.ApmConfiguration.Unnamed.$1", "type": "string", "tags": [], "label": "rootDir", @@ -60,7 +52,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration.Unnamed.$2", + "id": "def-server.ApmConfiguration.Unnamed.$2", "type": "Object", "tags": [], "label": "rawKibanaConfig", @@ -75,7 +67,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration.Unnamed.$3", + "id": "def-server.ApmConfiguration.Unnamed.$3", "type": "boolean", "tags": [], "label": "isDistributable", @@ -93,7 +85,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration.getConfig", + "id": "def-server.ApmConfiguration.getConfig", "type": "Function", "tags": [], "label": "getConfig", @@ -108,7 +100,7 @@ "children": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration.getConfig.$1", + "id": "def-server.ApmConfiguration.getConfig.$1", "type": "string", "tags": [], "label": "serviceName", @@ -126,7 +118,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.ApmConfiguration.isUsersRedactionEnabled", + "id": "def-server.ApmConfiguration.isUsersRedactionEnabled", "type": "Function", "tags": [], "label": "isUsersRedactionEnabled", @@ -147,7 +139,7 @@ "functions": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.getConfiguration", + "id": "def-server.getConfiguration", "type": "Function", "tags": [], "label": "getConfiguration", @@ -163,7 +155,7 @@ "children": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.getConfiguration.$1", + "id": "def-server.getConfiguration.$1", "type": "string", "tags": [], "label": "serviceName", @@ -182,7 +174,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.initApm", + "id": "def-server.initApm", "type": "Function", "tags": [], "label": "initApm", @@ -196,7 +188,7 @@ "children": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.initApm.$1", + "id": "def-server.initApm.$1", "type": "Array", "tags": [], "label": "argv", @@ -211,7 +203,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.initApm.$2", + "id": "def-server.initApm.$2", "type": "string", "tags": [], "label": "rootDir", @@ -226,7 +218,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.initApm.$3", + "id": "def-server.initApm.$3", "type": "boolean", "tags": [], "label": "isDistributable", @@ -241,7 +233,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.initApm.$4", + "id": "def-server.initApm.$4", "type": "string", "tags": [], "label": "serviceName", @@ -260,7 +252,7 @@ }, { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.shouldInstrumentClient", + "id": "def-server.shouldInstrumentClient", "type": "Function", "tags": [], "label": "shouldInstrumentClient", @@ -276,7 +268,7 @@ "children": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.shouldInstrumentClient.$1", + "id": "def-server.shouldInstrumentClient.$1", "type": "Object", "tags": [], "label": "config", @@ -301,7 +293,7 @@ "objects": [ { "parentPluginId": "@kbn/apm-config-loader", - "id": "def-common.apmConfigSchema", + "id": "def-server.apmConfigSchema", "type": "Object", "tags": [], "label": "apmConfigSchema", @@ -386,5 +378,13 @@ "initialIsOpen": false } ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 55a2429f90dbb..d7891fe75514d 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; @@ -23,14 +23,14 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core |-------------------|-----------|------------------------|-----------------| | 18 | 0 | 18 | 0 | -## Common +## Server ### Objects - + ### Functions - + ### Classes - + diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 9643c05c778e2..c6d3530168b07 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-07-30 +date: 2024-08-01 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 f5cfa412d0eba..e2e251da6838a 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-07-30 +date: 2024-08-01 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 ab47aa0afb5fd..dcd9ef93e8dca 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-07-30 +date: 2024-08-01 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 59f2fcba62ce4..11fc4c3aaca31 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 607ab71474739..77f658c1aa28b 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index bae79199fc9ac..3963e33e3f91d 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-07-30 +date: 2024-08-01 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 07ecd018be86c..7979684006e64 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-07-30 +date: 2024-08-01 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 893e11dbfa679..cb51561961230 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-07-30 +date: 2024-08-01 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 bc7d454b08ca2..4ea28e92020d7 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-07-30 +date: 2024-08-01 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 20b4b7f97b262..dc0b7573ccbd9 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-07-30 +date: 2024-08-01 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 bc6f8548382cc..7c73dede68129 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-07-30 +date: 2024-08-01 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 37dd9630e7772..1bee56d7998c1 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-07-30 +date: 2024-08-01 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 c109116aeec1d..820b98339caef 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-07-30 +date: 2024-08-01 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 934b6e070f3b8..fd5581972dcb4 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-07-30 +date: 2024-08-01 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 9641c7d1f9261..7686d6d38cff2 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-07-30 +date: 2024-08-01 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 bac6ac98b8672..46b425339690c 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_cli_dev_mode.devdocs.json index c37bb3fd626b3..2f1b44dd52f5e 100644 --- a/api_docs/kbn_cli_dev_mode.devdocs.json +++ b/api_docs/kbn_cli_dev_mode.devdocs.json @@ -9,19 +9,11 @@ "objects": [] }, "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { "classes": [], "functions": [ { "parentPluginId": "@kbn/cli-dev-mode", - "id": "def-common.bootstrapDevMode", + "id": "def-server.bootstrapDevMode", "type": "Function", "tags": [], "label": "bootstrapDevMode", @@ -35,7 +27,7 @@ "children": [ { "parentPluginId": "@kbn/cli-dev-mode", - "id": "def-common.bootstrapDevMode.$1", + "id": "def-server.bootstrapDevMode.$1", "type": "Object", "tags": [], "label": "{ configs, cliArgs, applyConfigOverrides }", @@ -57,5 +49,13 @@ "enums": [], "misc": [], "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 5a25757f68599..00c87906ea5a3 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; @@ -23,8 +23,8 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban |-------------------|-----------|------------------------|-----------------| | 2 | 0 | 2 | 0 | -## Common +## Server ### Functions - + diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 69fb669ce94de..8036fbb79e18f 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-07-30 +date: 2024-08-01 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 fef234fec4025..bd352fb754b62 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-07-30 +date: 2024-08-01 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 68eb66d3ddc78..b3ce4e08512ca 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-07-30 +date: 2024-08-01 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 0b6b1fcfc554a..9a5b94b724820 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.devdocs.json b/api_docs/kbn_config.devdocs.json index 9d3f7d417425c..ed8e98d30c968 100644 --- a/api_docs/kbn_config.devdocs.json +++ b/api_docs/kbn_config.devdocs.json @@ -9,18 +9,10 @@ "objects": [] }, "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { "classes": [ { "parentPluginId": "@kbn/config", - "id": "def-common.Env", + "id": "def-server.Env", "type": "Class", "tags": [], "label": "Env", @@ -31,7 +23,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.Env.packageInfo", + "id": "def-server.Env.packageInfo", "type": "Object", "tags": [], "label": "packageInfo", @@ -42,9 +34,9 @@ "{ readonly version: string; readonly branch: string; readonly buildNum: number; readonly buildSha: string; readonly buildShaShort: string; readonly buildDate: Date; readonly buildFlavor: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.BuildFlavor", + "section": "def-server.BuildFlavor", "text": "BuildFlavor" }, "; readonly dist: boolean; }" @@ -55,7 +47,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.Env.mode", + "id": "def-server.Env.mode", "type": "Object", "tags": [], "label": "mode", @@ -76,7 +68,7 @@ "functions": [ { "parentPluginId": "@kbn/config", - "id": "def-common.getConfigFromFiles", + "id": "def-server.getConfigFromFiles", "type": "Function", "tags": [], "label": "getConfigFromFiles", @@ -90,7 +82,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.getConfigFromFiles.$1", + "id": "def-server.getConfigFromFiles.$1", "type": "Object", "tags": [], "label": "configFiles", @@ -109,7 +101,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.hasConfigPathIntersection", + "id": "def-server.hasConfigPathIntersection", "type": "Function", "tags": [], "label": "hasConfigPathIntersection", @@ -123,7 +115,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.hasConfigPathIntersection.$1", + "id": "def-server.hasConfigPathIntersection.$1", "type": "string", "tags": [], "label": "leafPath", @@ -138,7 +130,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.hasConfigPathIntersection.$2", + "id": "def-server.hasConfigPathIntersection.$2", "type": "string", "tags": [], "label": "rootPath", @@ -157,7 +149,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.isConfigPath", + "id": "def-server.isConfigPath", "type": "Function", "tags": [], "label": "isConfigPath", @@ -173,7 +165,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.isConfigPath.$1", + "id": "def-server.isConfigPath.$1", "type": "Unknown", "tags": [], "label": "value", @@ -196,7 +188,7 @@ "interfaces": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ChangedDeprecatedPaths", + "id": "def-server.ChangedDeprecatedPaths", "type": "Interface", "tags": [], "label": "ChangedDeprecatedPaths", @@ -209,7 +201,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ChangedDeprecatedPaths.set", + "id": "def-server.ChangedDeprecatedPaths.set", "type": "Array", "tags": [], "label": "set", @@ -223,7 +215,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ChangedDeprecatedPaths.unset", + "id": "def-server.ChangedDeprecatedPaths.unset", "type": "Array", "tags": [], "label": "unset", @@ -240,7 +232,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationCommand", + "id": "def-server.ConfigDeprecationCommand", "type": "Interface", "tags": [], "label": "ConfigDeprecationCommand", @@ -253,7 +245,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationCommand.set", + "id": "def-server.ConfigDeprecationCommand.set", "type": "Array", "tags": [], "label": "set", @@ -267,7 +259,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationCommand.unset", + "id": "def-server.ConfigDeprecationCommand.unset", "type": "Array", "tags": [], "label": "unset", @@ -284,7 +276,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationContext", + "id": "def-server.ConfigDeprecationContext", "type": "Interface", "tags": [], "label": "ConfigDeprecationContext", @@ -297,7 +289,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationContext.version", + "id": "def-server.ConfigDeprecationContext.version", "type": "string", "tags": [], "label": "version", @@ -310,7 +302,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationContext.branch", + "id": "def-server.ConfigDeprecationContext.branch", "type": "string", "tags": [], "label": "branch", @@ -323,7 +315,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationContext.docLinks", + "id": "def-server.ConfigDeprecationContext.docLinks", "type": "Object", "tags": [], "label": "docLinks", @@ -348,7 +340,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory", + "id": "def-server.ConfigDeprecationFactory", "type": "Interface", "tags": [], "label": "ConfigDeprecationFactory", @@ -361,7 +353,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecate", + "id": "def-server.ConfigDeprecationFactory.deprecate", "type": "Function", "tags": [], "label": "deprecate", @@ -374,9 +366,9 @@ ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" } ], @@ -386,7 +378,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecate.$1", + "id": "def-server.ConfigDeprecationFactory.deprecate.$1", "type": "string", "tags": [], "label": "deprecatedKey", @@ -401,7 +393,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecate.$2", + "id": "def-server.ConfigDeprecationFactory.deprecate.$2", "type": "string", "tags": [], "label": "removeBy", @@ -416,7 +408,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecate.$3", + "id": "def-server.ConfigDeprecationFactory.deprecate.$3", "type": "CompoundType", "tags": [], "label": "details", @@ -434,7 +426,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecateFromRoot", + "id": "def-server.ConfigDeprecationFactory.deprecateFromRoot", "type": "Function", "tags": [], "label": "deprecateFromRoot", @@ -447,9 +439,9 @@ ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" } ], @@ -459,7 +451,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecateFromRoot.$1", + "id": "def-server.ConfigDeprecationFactory.deprecateFromRoot.$1", "type": "string", "tags": [], "label": "deprecatedKey", @@ -474,7 +466,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecateFromRoot.$2", + "id": "def-server.ConfigDeprecationFactory.deprecateFromRoot.$2", "type": "string", "tags": [], "label": "removeBy", @@ -489,7 +481,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.deprecateFromRoot.$3", + "id": "def-server.ConfigDeprecationFactory.deprecateFromRoot.$3", "type": "CompoundType", "tags": [], "label": "details", @@ -507,7 +499,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.rename", + "id": "def-server.ConfigDeprecationFactory.rename", "type": "Function", "tags": [], "label": "rename", @@ -520,9 +512,9 @@ ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" } ], @@ -532,7 +524,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.rename.$1", + "id": "def-server.ConfigDeprecationFactory.rename.$1", "type": "string", "tags": [], "label": "oldKey", @@ -547,7 +539,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.rename.$2", + "id": "def-server.ConfigDeprecationFactory.rename.$2", "type": "string", "tags": [], "label": "newKey", @@ -562,7 +554,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.rename.$3", + "id": "def-server.ConfigDeprecationFactory.rename.$3", "type": "CompoundType", "tags": [], "label": "details", @@ -580,7 +572,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.renameFromRoot", + "id": "def-server.ConfigDeprecationFactory.renameFromRoot", "type": "Function", "tags": [], "label": "renameFromRoot", @@ -593,9 +585,9 @@ ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" } ], @@ -605,7 +597,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.renameFromRoot.$1", + "id": "def-server.ConfigDeprecationFactory.renameFromRoot.$1", "type": "string", "tags": [], "label": "oldKey", @@ -620,7 +612,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.renameFromRoot.$2", + "id": "def-server.ConfigDeprecationFactory.renameFromRoot.$2", "type": "string", "tags": [], "label": "newKey", @@ -635,7 +627,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.renameFromRoot.$3", + "id": "def-server.ConfigDeprecationFactory.renameFromRoot.$3", "type": "CompoundType", "tags": [], "label": "details", @@ -653,7 +645,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.unused", + "id": "def-server.ConfigDeprecationFactory.unused", "type": "Function", "tags": [], "label": "unused", @@ -666,9 +658,9 @@ ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" } ], @@ -678,7 +670,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.unused.$1", + "id": "def-server.ConfigDeprecationFactory.unused.$1", "type": "string", "tags": [], "label": "unusedKey", @@ -693,7 +685,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.unused.$2", + "id": "def-server.ConfigDeprecationFactory.unused.$2", "type": "CompoundType", "tags": [], "label": "details", @@ -711,7 +703,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.unusedFromRoot", + "id": "def-server.ConfigDeprecationFactory.unusedFromRoot", "type": "Function", "tags": [], "label": "unusedFromRoot", @@ -724,9 +716,9 @@ ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" } ], @@ -736,7 +728,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.unusedFromRoot.$1", + "id": "def-server.ConfigDeprecationFactory.unusedFromRoot.$1", "type": "string", "tags": [], "label": "unusedKey", @@ -751,7 +743,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationFactory.unusedFromRoot.$2", + "id": "def-server.ConfigDeprecationFactory.unusedFromRoot.$2", "type": "CompoundType", "tags": [], "label": "details", @@ -772,7 +764,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails", + "id": "def-server.DeprecatedConfigDetails", "type": "Interface", "tags": [], "label": "DeprecatedConfigDetails", @@ -785,7 +777,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails.configPath", + "id": "def-server.DeprecatedConfigDetails.configPath", "type": "string", "tags": [], "label": "configPath", @@ -798,7 +790,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails.title", + "id": "def-server.DeprecatedConfigDetails.title", "type": "string", "tags": [], "label": "title", @@ -814,7 +806,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails.message", + "id": "def-server.DeprecatedConfigDetails.message", "type": "string", "tags": [], "label": "message", @@ -827,7 +819,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails.level", + "id": "def-server.DeprecatedConfigDetails.level", "type": "CompoundType", "tags": [], "label": "level", @@ -843,7 +835,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails.silent", + "id": "def-server.DeprecatedConfigDetails.silent", "type": "CompoundType", "tags": [], "label": "silent", @@ -859,7 +851,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails.documentationUrl", + "id": "def-server.DeprecatedConfigDetails.documentationUrl", "type": "string", "tags": [], "label": "documentationUrl", @@ -875,7 +867,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.DeprecatedConfigDetails.correctiveActions", + "id": "def-server.DeprecatedConfigDetails.correctiveActions", "type": "Object", "tags": [], "label": "correctiveActions", @@ -894,7 +886,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.EnvironmentMode", + "id": "def-server.EnvironmentMode", "type": "Interface", "tags": [], "label": "EnvironmentMode", @@ -905,7 +897,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.EnvironmentMode.name", + "id": "def-server.EnvironmentMode.name", "type": "CompoundType", "tags": [], "label": "name", @@ -919,7 +911,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.EnvironmentMode.dev", + "id": "def-server.EnvironmentMode.dev", "type": "boolean", "tags": [], "label": "dev", @@ -930,7 +922,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.EnvironmentMode.prod", + "id": "def-server.EnvironmentMode.prod", "type": "boolean", "tags": [], "label": "prod", @@ -944,7 +936,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo", + "id": "def-server.PackageInfo", "type": "Interface", "tags": [], "label": "PackageInfo", @@ -955,7 +947,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.version", + "id": "def-server.PackageInfo.version", "type": "string", "tags": [], "label": "version", @@ -966,7 +958,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.branch", + "id": "def-server.PackageInfo.branch", "type": "string", "tags": [], "label": "branch", @@ -977,7 +969,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.buildNum", + "id": "def-server.PackageInfo.buildNum", "type": "number", "tags": [], "label": "buildNum", @@ -988,7 +980,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.buildSha", + "id": "def-server.PackageInfo.buildSha", "type": "string", "tags": [], "label": "buildSha", @@ -999,7 +991,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.buildShaShort", + "id": "def-server.PackageInfo.buildShaShort", "type": "string", "tags": [], "label": "buildShaShort", @@ -1010,7 +1002,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.buildDate", + "id": "def-server.PackageInfo.buildDate", "type": "Object", "tags": [], "label": "buildDate", @@ -1024,7 +1016,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.buildFlavor", + "id": "def-server.PackageInfo.buildFlavor", "type": "CompoundType", "tags": [], "label": "buildFlavor", @@ -1038,7 +1030,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.PackageInfo.dist", + "id": "def-server.PackageInfo.dist", "type": "boolean", "tags": [], "label": "dist", @@ -1055,7 +1047,7 @@ "misc": [ { "parentPluginId": "@kbn/config", - "id": "def-common.AddConfigDeprecation", + "id": "def-server.AddConfigDeprecation", "type": "Type", "tags": [], "label": "AddConfigDeprecation", @@ -1066,9 +1058,9 @@ "(details: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.DeprecatedConfigDetails", + "section": "def-server.DeprecatedConfigDetails", "text": "DeprecatedConfigDetails" }, ") => void" @@ -1080,7 +1072,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.AddConfigDeprecation.$1", + "id": "def-server.AddConfigDeprecation.$1", "type": "Object", "tags": [], "label": "details", @@ -1088,9 +1080,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.DeprecatedConfigDetails", + "section": "def-server.DeprecatedConfigDetails", "text": "DeprecatedConfigDetails" } ], @@ -1103,7 +1095,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.BuildFlavor", + "id": "def-server.BuildFlavor", "type": "Type", "tags": [], "label": "BuildFlavor", @@ -1118,7 +1110,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecation", + "id": "def-server.ConfigDeprecation", "type": "Type", "tags": [], "label": "ConfigDeprecation", @@ -1129,25 +1121,25 @@ "(config: Readonly<{ [x: string]: any; }>, fromPath: string, addDeprecation: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.AddConfigDeprecation", + "section": "def-server.AddConfigDeprecation", "text": "AddConfigDeprecation" }, ", context: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationContext", + "section": "def-server.ConfigDeprecationContext", "text": "ConfigDeprecationContext" }, ") => void | ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationCommand", + "section": "def-server.ConfigDeprecationCommand", "text": "ConfigDeprecationCommand" } ], @@ -1158,7 +1150,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecation.$1", + "id": "def-server.ConfigDeprecation.$1", "type": "Object", "tags": [], "label": "config", @@ -1174,7 +1166,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecation.$2", + "id": "def-server.ConfigDeprecation.$2", "type": "string", "tags": [], "label": "fromPath", @@ -1185,7 +1177,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecation.$3", + "id": "def-server.ConfigDeprecation.$3", "type": "Function", "tags": [], "label": "addDeprecation", @@ -1194,9 +1186,9 @@ "(details: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.DeprecatedConfigDetails", + "section": "def-server.DeprecatedConfigDetails", "text": "DeprecatedConfigDetails" }, ") => void" @@ -1208,7 +1200,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecation.$3.$1", + "id": "def-server.ConfigDeprecation.$3.$1", "type": "Object", "tags": [], "label": "details", @@ -1216,9 +1208,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.DeprecatedConfigDetails", + "section": "def-server.DeprecatedConfigDetails", "text": "DeprecatedConfigDetails" } ], @@ -1230,7 +1222,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecation.$4", + "id": "def-server.ConfigDeprecation.$4", "type": "Object", "tags": [], "label": "context", @@ -1238,9 +1230,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationContext", + "section": "def-server.ConfigDeprecationContext", "text": "ConfigDeprecationContext" } ], @@ -1253,7 +1245,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationProvider", + "id": "def-server.ConfigDeprecationProvider", "type": "Type", "tags": [], "label": "ConfigDeprecationProvider", @@ -1264,17 +1256,17 @@ "(factory: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" }, ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" }, "[]" @@ -1286,7 +1278,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigDeprecationProvider.$1", + "id": "def-server.ConfigDeprecationProvider.$1", "type": "Object", "tags": [], "label": "factory", @@ -1294,9 +1286,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" } ], @@ -1309,7 +1301,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.ConfigPath", + "id": "def-server.ConfigPath", "type": "Type", "tags": [], "label": "ConfigPath", @@ -1324,7 +1316,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.RawConfigAdapter", + "id": "def-server.RawConfigAdapter", "type": "Type", "tags": [], "label": "RawConfigAdapter", @@ -1339,7 +1331,7 @@ "children": [ { "parentPluginId": "@kbn/config", - "id": "def-common.RawConfigAdapter.$1", + "id": "def-server.RawConfigAdapter.$1", "type": "Object", "tags": [], "label": "rawConfig", @@ -1356,7 +1348,7 @@ }, { "parentPluginId": "@kbn/config", - "id": "def-common.RawConfigurationProvider", + "id": "def-server.RawConfigurationProvider", "type": "Type", "tags": [], "label": "RawConfigurationProvider", @@ -1373,5 +1365,13 @@ } ], "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index a5ba1e2242bf7..ebfc90d0984e4 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; @@ -23,17 +23,17 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core |-------------------|-----------|------------------------|-----------------| | 79 | 0 | 50 | 9 | -## Common +## Server ### Functions - + ### Classes - + ### Interfaces - + ### Consts, variables and types - + diff --git a/api_docs/kbn_config_mocks.devdocs.json b/api_docs/kbn_config_mocks.devdocs.json index 44c2f2ea91060..922f5422a35c3 100644 --- a/api_docs/kbn_config_mocks.devdocs.json +++ b/api_docs/kbn_config_mocks.devdocs.json @@ -34,9 +34,9 @@ " | undefined; }) => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.Env", + "section": "def-server.Env", "text": "Env" } ], @@ -203,9 +203,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationContext", + "section": "def-server.ConfigDeprecationContext", "text": "ConfigDeprecationContext" } ], @@ -225,25 +225,25 @@ "{ has: jest.MockInstance; get: jest.MockInstance; set: jest.MockInstance; getFlattenedPaths: jest.MockInstance; toRaw: jest.MockInstance, [], unknown>; } & ", @@ -271,9 +271,9 @@ ">, [], unknown>; setGlobalStripUnknownKeys: jest.MockInstance; setSchema: jest.MockInstance], unknown>; addDeprecationProvider: jest.MockInstance; getHandledDeprecatedConfigs: jest.MockInstance<[string, ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.DeprecatedConfigDetails", + "section": "def-server.DeprecatedConfigDetails", "text": "DeprecatedConfigDetails" }, "[]][], [], unknown>; atPath: jest.MockInstance<", @@ -313,25 +313,25 @@ ", [", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigPath", + "section": "def-server.ConfigPath", "text": "ConfigPath" }, ", ({ ignoreUnchanged?: boolean | undefined; } | undefined)?], unknown>; atPathSync: jest.MockInstance; isEnabledAtPath: jest.MockInstance, [path: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigPath", + "section": "def-server.ConfigPath", "text": "ConfigPath" }, "], unknown>; getUnusedPaths: jest.MockInstance, [], unknown>; getUsedPaths: jest.MockInstance, [], unknown>; getDeprecatedConfigPath$: jest.MockInstance<", @@ -339,17 +339,17 @@ "<", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ChangedDeprecatedPaths", + "section": "def-server.ChangedDeprecatedPaths", "text": "ChangedDeprecatedPaths" }, ">, [], unknown>; addDynamicConfigPaths: jest.MockInstance; setDynamicConfigOverrides: jest.MockInstance], unknown>; } & ", @@ -411,9 +411,9 @@ "() => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationContext", + "section": "def-server.ConfigDeprecationContext", "text": "ConfigDeprecationContext" } ], diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index d62cc89ffc3f4..6f371dc959cbb 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-07-30 +date: 2024-08-01 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 313cd427f4b7f..a08ece7b7cab8 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-07-30 +date: 2024-08-01 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 9bbe8c07be75c..391ff1a604c7d 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-07-30 +date: 2024-08-01 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 8474a5ecbf4e0..22e49932c4098 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-07-30 +date: 2024-08-01 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 03d7df851e457..188e53504bb7e 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-07-30 +date: 2024-08-01 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 46bf1483bea9c..02a3120275cb8 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-07-30 +date: 2024-08-01 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 927cc08614dc0..d8fbf620b43b1 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-07-30 +date: 2024-08-01 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_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index d3105dfcf92db..cabf0c10e03dc 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index f9f82eb801872..a917d0fc31164 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_analytics_browser.devdocs.json index 7947b4922115d..2ff35482ac18e 100644 --- a/api_docs/kbn_core_analytics_browser.devdocs.json +++ b/api_docs/kbn_core_analytics_browser.devdocs.json @@ -13,7 +13,10 @@ "description": [ "\nGeneral settings of the analytics client" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "AnalyticsClientInitContext" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -26,23 +29,7 @@ "description": [ "\nBoolean indicating if it's running in developer mode." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-analytics-browser", - "id": "def-public.AnalyticsClientInitContext.sendTo", - "type": "CompoundType", - "tags": [], - "label": "sendTo", - "description": [ - "\nSpecify if the shippers should send their data to the production or staging environments." - ], - "signature": [ - "\"production\" | \"staging\"" - ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -56,15 +43,9 @@ "\nApplication-provided logger." ], "signature": [ - { - "pluginId": "@kbn/logging", - "scope": "common", - "docId": "kibKbnLoggingPluginApi", - "section": "def-common.Logger", - "text": "Logger" - } + "Logger" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -81,16 +62,10 @@ "\nDefinition of a context provider" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -103,7 +78,7 @@ "description": [ "\nThe name of the provider." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -120,7 +95,7 @@ "Observable", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -135,16 +110,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -161,16 +130,10 @@ "\nDefinition of the full event structure" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.Event", - "text": "Event" - }, + "Event", "" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -183,7 +146,7 @@ "description": [ "\nThe time the event was generated in ISO format." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -196,7 +159,7 @@ "description": [ "\nThe event type." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -212,7 +175,7 @@ "signature": [ "Properties" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -226,15 +189,9 @@ "\nThe {@link EventContext} enriched during the processing pipeline." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventContext", - "text": "EventContext" - } + "EventContext" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -250,7 +207,10 @@ "description": [ "\nDefinition of the context that can be appended to the events through the {@link IAnalyticsClient.registerContextProvider}." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "signature": [ + "EventContext" + ], + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -266,7 +226,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -282,7 +242,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -298,7 +258,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -314,7 +274,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -330,7 +290,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -346,7 +306,7 @@ "signature": [ "boolean | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -362,7 +322,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -378,7 +338,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -394,7 +354,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -410,7 +370,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -426,7 +386,7 @@ "signature": [ "[key: string]: unknown" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -443,16 +403,10 @@ "\nDefinition of an Event Type." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -465,7 +419,7 @@ "description": [ "\nThe event type's unique name." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -480,16 +434,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -505,7 +453,10 @@ "description": [ "\nAnalytics client's public APIs" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "IAnalyticsClient" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -523,7 +474,7 @@ "signature": [ "(eventType: string, eventData: EventTypeData) => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": true, "references": [ @@ -1027,150 +978,6 @@ "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1439,10 +1246,6 @@ "plugin": "actions", "path": "x-pack/plugins/actions/server/lib/action_executor.test.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/mocks.ts" - }, { "plugin": "@kbn/core-analytics-browser-internal", "path": "packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts" @@ -1497,7 +1300,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1514,7 +1317,7 @@ "signature": [ "EventTypeData" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1533,16 +1336,10 @@ ], "signature": [ "(eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1556,16 +1353,10 @@ "The definition of the event type {@link EventTypeOpts }." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1584,32 +1375,14 @@ ], "signature": [ "(Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1623,16 +1396,10 @@ "The {@link IShipper } class to instantiate the shipper." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1649,7 +1416,7 @@ "signature": [ "ShipperConfig" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1664,16 +1431,10 @@ "Additional options to register the shipper {@link RegisterShipperOpts }." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -1692,16 +1453,10 @@ ], "signature": [ "(optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1715,15 +1470,9 @@ "{@link OptInConfig }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - } + "OptInConfig" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1744,16 +1493,10 @@ ], "signature": [ "(contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": true, "references": [ @@ -1873,18 +1616,6 @@ "plugin": "apm", "path": "x-pack/plugins/observability_solution/apm/public/analytics/register_service_inventory_view_type_context.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1989,10 +1720,6 @@ "plugin": "@kbn/core-status-server-internal", "path": "packages/core/status/core-status-server-internal/src/status_service.test.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/mocks.ts" - }, { "plugin": "@kbn/core-analytics-browser-internal", "path": "packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts" @@ -2045,16 +1772,10 @@ "{@link ContextProviderOpts }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2074,7 +1795,7 @@ "signature": [ "(contextProviderName: string) => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2090,7 +1811,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2110,16 +1831,10 @@ "signature": [ "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2135,7 +1850,7 @@ "signature": [ "() => Promise" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2153,7 +1868,7 @@ "signature": [ "() => Promise" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2171,7 +1886,10 @@ "description": [ "\nBasic structure of a Shipper" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "signature": [ + "IShipper" + ], + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2186,16 +1904,10 @@ ], "signature": [ "(events: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.Event", - "text": "Event" - }, + "Event", ">[]) => void" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2209,16 +1921,10 @@ "batched events {@link Event }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.Event", - "text": "Event" - }, + "Event", ">[]" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2238,7 +1944,7 @@ "signature": [ "(isOptedIn: boolean) => void" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2254,7 +1960,7 @@ "signature": [ "boolean" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2273,16 +1979,10 @@ ], "signature": [ "((newContext: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventContext", - "text": "EventContext" - }, + "EventContext", ") => void) | undefined" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2296,15 +1996,9 @@ "The full new context to set {@link EventContext }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventContext", - "text": "EventContext" - } + "EventContext" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2324,16 +2018,10 @@ "signature": [ "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", "> | undefined" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2349,7 +2037,7 @@ "signature": [ "() => Promise" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2367,7 +2055,7 @@ "signature": [ "() => void" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2419,7 +2107,10 @@ "description": [ "\nOptions for the optIn API" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "OptInConfig" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2433,15 +2124,9 @@ "\nControls the global enabled/disabled behaviour of the client and shippers." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfigPerType", - "text": "OptInConfigPerType" - } + "OptInConfigPerType" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2456,16 +2141,10 @@ ], "signature": [ "Record | undefined" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2481,7 +2160,10 @@ "description": [ "\nSets whether a type of event is enabled/disabled globally or per shipper." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "OptInConfigPerType" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2494,7 +2176,7 @@ "description": [ "\nThe event type is globally enabled." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2510,7 +2192,7 @@ "signature": [ "Record | undefined" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2526,7 +2208,10 @@ "description": [ "\nOptional options to register a shipper" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "RegisterShipperOpts" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2542,24 +2227,12 @@ "\nSchema to represent an array" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " extends ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMeta", - "text": "SchemaMeta" - }, + "SchemaMeta", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2575,7 +2248,7 @@ "signature": [ "\"array\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2590,72 +2263,24 @@ ], "signature": [ "{ type: \"pass_through\"; _meta: { description: string; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", "; } | (unknown extends Value ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends (infer U)[] | readonly (infer U)[] ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " : NonNullable extends Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends object ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", ")" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2672,16 +2297,10 @@ "\nSchema to define a primitive value" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2696,31 +2315,13 @@ ], "signature": [ "NonNullable extends string | Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaStringTypes", - "text": "AllowedSchemaStringTypes" - }, + "AllowedSchemaStringTypes", " : NonNullable extends number ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaNumberTypes", - "text": "AllowedSchemaNumberTypes" - }, + "AllowedSchemaNumberTypes", " : NonNullable extends boolean ? \"boolean\" : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaTypes", - "text": "AllowedSchemaTypes" - } + "AllowedSchemaTypes" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2735,16 +2336,10 @@ ], "signature": [ "{ description: string; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2761,16 +2356,10 @@ "\nSchema meta with optional description" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMeta", - "text": "SchemaMeta" - }, + "SchemaMeta", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2785,16 +2374,10 @@ ], "signature": [ "({ description?: string | undefined; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", ") | undefined" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2811,24 +2394,12 @@ "\nSchema to represent an object" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " extends ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMeta", - "text": "SchemaMeta" - }, + "SchemaMeta", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2843,16 +2414,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2869,16 +2434,10 @@ "\nConstructor of a {@link IShipper}" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2891,7 +2450,7 @@ "description": [ "\nThe shipper's unique name" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2907,7 +2466,7 @@ "signature": [ "any" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2923,7 +2482,7 @@ "signature": [ "Config" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2938,15 +2497,9 @@ "Common context {@link AnalyticsClientInitContext }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AnalyticsClientInitContext", - "text": "AnalyticsClientInitContext" - } + "AnalyticsClientInitContext" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2966,7 +2519,10 @@ "description": [ "\nShape of the events emitted by the telemetryCounter$ observable" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "signature": [ + "TelemetryCounter" + ], + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2982,7 +2538,7 @@ "signature": [ "\"succeeded\" | \"failed\" | \"enqueued\" | \"sent_to_shipper\" | \"dropped\"" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2995,7 +2551,7 @@ "description": [ "\nWho emitted the event? It can be \"client\" or the name of the shipper." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -3008,7 +2564,7 @@ "description": [ "\nThe event type the success/failure/drop event refers to." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -3021,7 +2577,7 @@ "description": [ "\nCode to provide additional information about the success or failure. Examples are 200/400/504/ValidationError/UnknownError" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -3034,7 +2590,7 @@ "description": [ "\nThe number of events that this counter refers to." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -3056,7 +2612,7 @@ "signature": [ "\"boolean\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3073,7 +2629,7 @@ "signature": [ "\"date\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"double\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3090,7 +2646,7 @@ "signature": [ "\"keyword\" | \"text\" | \"date\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3107,7 +2663,7 @@ "signature": [ "\"boolean\" | \"keyword\" | \"text\" | \"date\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"double\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3123,63 +2679,21 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; registerEventType: (eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void; registerShipper: (Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void; registerContextProvider: (contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void; removeContextProvider: (contextProviderName: string) => void; }" ], "path": "packages/core/analytics/core-analytics-browser/src/types.ts", @@ -3198,23 +2712,11 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; }" ], "path": "packages/core/analytics/core-analytics-browser/src/types.ts", @@ -3234,7 +2736,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3251,7 +2753,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3267,31 +2769,13 @@ ], "signature": [ "Value extends string | Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaStringTypes", - "text": "AllowedSchemaStringTypes" - }, + "AllowedSchemaStringTypes", " : Value extends number ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaNumberTypes", - "text": "AllowedSchemaNumberTypes" - }, + "AllowedSchemaNumberTypes", " : Value extends boolean ? \"boolean\" : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaTypes", - "text": "AllowedSchemaTypes" - } + "AllowedSchemaTypes" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3307,16 +2791,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3333,7 +2811,7 @@ "signature": [ "unknown extends Value ? { optional?: boolean | undefined; } : undefined extends Value ? { optional: true; } : { optional?: false | undefined; }" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3349,72 +2827,24 @@ ], "signature": [ "{ type: \"pass_through\"; _meta: { description: string; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", "; } | (unknown extends Value ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends (infer U)[] | readonly (infer U)[] ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " : NonNullable extends Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends object ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", ")" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3431,7 +2861,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3448,7 +2878,7 @@ "signature": [ "\"succeeded\" | \"failed\" | \"enqueued\" | \"sent_to_shipper\" | \"dropped\"" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index d883c1c4bcfd4..b5b2e3d91fd06 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.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 | |-------------------|-----------|------------------------|-----------------| -| 101 | 0 | 0 | 0 | +| 100 | 0 | 0 | 0 | ## Client diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 0c0fe471aa721..c56c48961098f 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-07-30 +date: 2024-08-01 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 266ecbe6c2b29..bfba4c9373fbf 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_analytics_server.devdocs.json index 3d8547c721ef1..d88810492946d 100644 --- a/api_docs/kbn_core_analytics_server.devdocs.json +++ b/api_docs/kbn_core_analytics_server.devdocs.json @@ -21,7 +21,10 @@ "description": [ "\nGeneral settings of the analytics client" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "AnalyticsClientInitContext" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -34,23 +37,7 @@ "description": [ "\nBoolean indicating if it's running in developer mode." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-analytics-server", - "id": "def-server.AnalyticsClientInitContext.sendTo", - "type": "CompoundType", - "tags": [], - "label": "sendTo", - "description": [ - "\nSpecify if the shippers should send their data to the production or staging environments." - ], - "signature": [ - "\"production\" | \"staging\"" - ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -64,15 +51,9 @@ "\nApplication-provided logger." ], "signature": [ - { - "pluginId": "@kbn/logging", - "scope": "common", - "docId": "kibKbnLoggingPluginApi", - "section": "def-common.Logger", - "text": "Logger" - } + "Logger" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -89,16 +70,10 @@ "\nDefinition of a context provider" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -111,7 +86,7 @@ "description": [ "\nThe name of the provider." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -128,7 +103,7 @@ "Observable", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -143,16 +118,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -169,16 +138,10 @@ "\nDefinition of the full event structure" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.Event", - "text": "Event" - }, + "Event", "" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -191,7 +154,7 @@ "description": [ "\nThe time the event was generated in ISO format." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -204,7 +167,7 @@ "description": [ "\nThe event type." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -220,7 +183,7 @@ "signature": [ "Properties" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -234,15 +197,9 @@ "\nThe {@link EventContext} enriched during the processing pipeline." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventContext", - "text": "EventContext" - } + "EventContext" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -258,7 +215,10 @@ "description": [ "\nDefinition of the context that can be appended to the events through the {@link IAnalyticsClient.registerContextProvider}." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "signature": [ + "EventContext" + ], + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -274,7 +234,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -290,7 +250,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -306,7 +266,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -322,7 +282,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -338,7 +298,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -354,7 +314,7 @@ "signature": [ "boolean | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -370,7 +330,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -386,7 +346,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -402,7 +362,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -418,7 +378,7 @@ "signature": [ "string | undefined" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -434,7 +394,7 @@ "signature": [ "[key: string]: unknown" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -451,16 +411,10 @@ "\nDefinition of an Event Type." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -473,7 +427,7 @@ "description": [ "\nThe event type's unique name." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -488,16 +442,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -513,7 +461,10 @@ "description": [ "\nAnalytics client's public APIs" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "IAnalyticsClient" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -531,7 +482,7 @@ "signature": [ "(eventType: string, eventData: EventTypeData) => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": true, "references": [ @@ -1035,150 +986,6 @@ "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1447,10 +1254,6 @@ "plugin": "actions", "path": "x-pack/plugins/actions/server/lib/action_executor.test.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/mocks.ts" - }, { "plugin": "@kbn/core-analytics-browser-internal", "path": "packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts" @@ -1505,7 +1308,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1522,7 +1325,7 @@ "signature": [ "EventTypeData" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1541,16 +1344,10 @@ ], "signature": [ "(eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1564,16 +1361,10 @@ "The definition of the event type {@link EventTypeOpts }." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1592,32 +1383,14 @@ ], "signature": [ "(Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1631,16 +1404,10 @@ "The {@link IShipper } class to instantiate the shipper." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1657,7 +1424,7 @@ "signature": [ "ShipperConfig" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1672,16 +1439,10 @@ "Additional options to register the shipper {@link RegisterShipperOpts }." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -1700,16 +1461,10 @@ ], "signature": [ "(optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1723,15 +1478,9 @@ "{@link OptInConfig }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - } + "OptInConfig" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1752,16 +1501,10 @@ ], "signature": [ "(contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": true, "references": [ @@ -1881,18 +1624,6 @@ "plugin": "apm", "path": "x-pack/plugins/observability_solution/apm/public/analytics/register_service_inventory_view_type_context.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts" - }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1997,10 +1728,6 @@ "plugin": "@kbn/core-status-server-internal", "path": "packages/core/status/core-status-server-internal/src/status_service.test.ts" }, - { - "plugin": "@kbn/ebt", - "path": "packages/analytics/ebt/client/src/analytics_client/mocks.ts" - }, { "plugin": "@kbn/core-analytics-browser-internal", "path": "packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts" @@ -2053,16 +1780,10 @@ "{@link ContextProviderOpts }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2082,7 +1803,7 @@ "signature": [ "(contextProviderName: string) => void" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2098,7 +1819,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2118,16 +1839,10 @@ "signature": [ "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2143,7 +1858,7 @@ "signature": [ "() => Promise" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2161,7 +1876,7 @@ "signature": [ "() => Promise" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2179,7 +1894,10 @@ "description": [ "\nBasic structure of a Shipper" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "signature": [ + "IShipper" + ], + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2194,16 +1912,10 @@ ], "signature": [ "(events: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.Event", - "text": "Event" - }, + "Event", ">[]) => void" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2217,16 +1929,10 @@ "batched events {@link Event }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.Event", - "text": "Event" - }, + "Event", ">[]" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2246,7 +1952,7 @@ "signature": [ "(isOptedIn: boolean) => void" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2262,7 +1968,7 @@ "signature": [ "boolean" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2281,16 +1987,10 @@ ], "signature": [ "((newContext: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventContext", - "text": "EventContext" - }, + "EventContext", ") => void) | undefined" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2304,15 +2004,9 @@ "The full new context to set {@link EventContext }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventContext", - "text": "EventContext" - } + "EventContext" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2332,16 +2026,10 @@ "signature": [ "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", "> | undefined" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2357,7 +2045,7 @@ "signature": [ "() => Promise" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2375,7 +2063,7 @@ "signature": [ "() => void" ], - "path": "packages/analytics/ebt/client/src/shippers/types.ts", + "path": "node_modules/@elastic/ebt/client/src/shippers/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2393,7 +2081,10 @@ "description": [ "\nOptions for the optIn API" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "OptInConfig" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2407,15 +2098,9 @@ "\nControls the global enabled/disabled behaviour of the client and shippers." ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfigPerType", - "text": "OptInConfigPerType" - } + "OptInConfigPerType" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2430,16 +2115,10 @@ ], "signature": [ "Record | undefined" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2455,7 +2134,10 @@ "description": [ "\nSets whether a type of event is enabled/disabled globally or per shipper." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "OptInConfigPerType" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2468,7 +2150,7 @@ "description": [ "\nThe event type is globally enabled." ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2484,7 +2166,7 @@ "signature": [ "Record | undefined" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2500,7 +2182,10 @@ "description": [ "\nOptional options to register a shipper" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "signature": [ + "RegisterShipperOpts" + ], + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -2516,24 +2201,12 @@ "\nSchema to represent an array" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " extends ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMeta", - "text": "SchemaMeta" - }, + "SchemaMeta", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2549,7 +2222,7 @@ "signature": [ "\"array\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2564,72 +2237,24 @@ ], "signature": [ "{ type: \"pass_through\"; _meta: { description: string; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", "; } | (unknown extends Value ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends (infer U)[] | readonly (infer U)[] ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " : NonNullable extends Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends object ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", ")" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2646,16 +2271,10 @@ "\nSchema to define a primitive value" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2670,31 +2289,13 @@ ], "signature": [ "NonNullable extends string | Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaStringTypes", - "text": "AllowedSchemaStringTypes" - }, + "AllowedSchemaStringTypes", " : NonNullable extends number ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaNumberTypes", - "text": "AllowedSchemaNumberTypes" - }, + "AllowedSchemaNumberTypes", " : NonNullable extends boolean ? \"boolean\" : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaTypes", - "text": "AllowedSchemaTypes" - } + "AllowedSchemaTypes" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2709,16 +2310,10 @@ ], "signature": [ "{ description: string; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2735,16 +2330,10 @@ "\nSchema meta with optional description" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMeta", - "text": "SchemaMeta" - }, + "SchemaMeta", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2759,16 +2348,10 @@ ], "signature": [ "({ description?: string | undefined; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", ") | undefined" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2785,24 +2368,12 @@ "\nSchema to represent an object" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " extends ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMeta", - "text": "SchemaMeta" - }, + "SchemaMeta", "" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2817,16 +2388,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -2843,16 +2408,10 @@ "\nConstructor of a {@link IShipper}" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", "" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2865,7 +2424,7 @@ "description": [ "\nThe shipper's unique name" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2881,7 +2440,7 @@ "signature": [ "any" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2897,7 +2456,7 @@ "signature": [ "Config" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2912,15 +2471,9 @@ "Common context {@link AnalyticsClientInitContext }" ], "signature": [ - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AnalyticsClientInitContext", - "text": "AnalyticsClientInitContext" - } + "AnalyticsClientInitContext" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2940,7 +2493,10 @@ "description": [ "\nShape of the events emitted by the telemetryCounter$ observable" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "signature": [ + "TelemetryCounter" + ], + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2956,7 +2512,7 @@ "signature": [ "\"succeeded\" | \"failed\" | \"enqueued\" | \"sent_to_shipper\" | \"dropped\"" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2969,7 +2525,7 @@ "description": [ "\nWho emitted the event? It can be \"client\" or the name of the shipper." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2982,7 +2538,7 @@ "description": [ "\nThe event type the success/failure/drop event refers to." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -2995,7 +2551,7 @@ "description": [ "\nCode to provide additional information about the success or failure. Examples are 200/400/504/ValidationError/UnknownError" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false }, @@ -3008,7 +2564,7 @@ "description": [ "\nThe number of events that this counter refers to." ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false } @@ -3030,7 +2586,7 @@ "signature": [ "\"boolean\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3047,7 +2603,7 @@ "signature": [ "\"date\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"double\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3064,7 +2620,7 @@ "signature": [ "\"keyword\" | \"text\" | \"date\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3081,7 +2637,7 @@ "signature": [ "\"boolean\" | \"keyword\" | \"text\" | \"date\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"double\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3097,63 +2653,21 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; registerEventType: (eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void; registerShipper: (Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void; registerContextProvider: (contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void; removeContextProvider: (contextProviderName: string) => void; }" ], "path": "packages/core/analytics/core-analytics-server/src/contracts.ts", @@ -3172,63 +2686,21 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; registerEventType: (eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void; registerShipper: (Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void; registerContextProvider: (contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void; removeContextProvider: (contextProviderName: string) => void; }" ], "path": "packages/core/analytics/core-analytics-server/src/contracts.ts", @@ -3247,23 +2719,11 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; }" ], "path": "packages/core/analytics/core-analytics-server/src/contracts.ts", @@ -3283,7 +2743,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3300,7 +2760,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3316,31 +2776,13 @@ ], "signature": [ "Value extends string | Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaStringTypes", - "text": "AllowedSchemaStringTypes" - }, + "AllowedSchemaStringTypes", " : Value extends number ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaNumberTypes", - "text": "AllowedSchemaNumberTypes" - }, + "AllowedSchemaNumberTypes", " : Value extends boolean ? \"boolean\" : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.AllowedSchemaTypes", - "text": "AllowedSchemaTypes" - } + "AllowedSchemaTypes" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3356,16 +2798,10 @@ ], "signature": [ "{ [Key in keyof Required]: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaValue", - "text": "SchemaValue" - }, + "SchemaValue", "; }" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3382,7 +2818,7 @@ "signature": [ "unknown extends Value ? { optional?: boolean | undefined; } : undefined extends Value ? { optional: true; } : { optional?: false | undefined; }" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3398,72 +2834,24 @@ ], "signature": [ "{ type: \"pass_through\"; _meta: { description: string; } & ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaMetaOptional", - "text": "SchemaMetaOptional" - }, + "SchemaMetaOptional", "; } | (unknown extends Value ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " | ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends (infer U)[] | readonly (infer U)[] ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaArray", - "text": "SchemaArray" - }, + "SchemaArray", " : NonNullable extends Date ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", " : NonNullable extends object ? ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaObject", - "text": "SchemaObject" - }, + "SchemaObject", " : ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.SchemaChildValue", - "text": "SchemaChildValue" - }, + "SchemaChildValue", ")" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3480,7 +2868,7 @@ "signature": [ "string" ], - "path": "packages/analytics/ebt/client/src/analytics_client/types.ts", + "path": "node_modules/@elastic/ebt/client/src/analytics_client/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3497,7 +2885,7 @@ "signature": [ "\"succeeded\" | \"failed\" | \"enqueued\" | \"sent_to_shipper\" | \"dropped\"" ], - "path": "packages/analytics/ebt/client/src/events/types.ts", + "path": "node_modules/@elastic/ebt/client/src/events/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 663d3cd6c88c0..a3c023118b0ba 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_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 | |-------------------|-----------|------------------------|-----------------| -| 100 | 0 | 0 | 0 | +| 99 | 0 | 0 | 0 | ## Server diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 6d90a8c4ce769..7905d0f914028 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-07-30 +date: 2024-08-01 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 f652982af6d28..55091cf7ce397 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-07-30 +date: 2024-08-01 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 1a8928f2aa723..55701f01cd9a0 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-07-30 +date: 2024-08-01 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 abc9819ede038..16e694f675ada 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-07-30 +date: 2024-08-01 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 78608ff9841cb..eff713f8e2129 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-07-30 +date: 2024-08-01 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 6d80e401077bd..6c20af0d4b716 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_apps_browser_internal.devdocs.json index 55c6bb04db033..18fb1dea37623 100644 --- a/api_docs/kbn_core_apps_browser_internal.devdocs.json +++ b/api_docs/kbn_core_apps_browser_internal.devdocs.json @@ -363,23 +363,11 @@ "description": [], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; }" ], "path": "packages/core/apps/core-apps-browser-internal/src/core_app.ts", diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 428f54f8c56e5..85adee9fccc28 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-07-30 +date: 2024-08-01 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 e9ee53337dc73..8e7b1b4cdd4ba 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-07-30 +date: 2024-08-01 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 22a0a08d3974c..bc4eddec94574 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-07-30 +date: 2024-08-01 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 6022e576a0f7e..671091c5b3e09 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-07-30 +date: 2024-08-01 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 8a7a534d258c3..23fc874794842 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-07-30 +date: 2024-08-01 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 7e7b219da7529..70be07ac048d0 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_base_server_mocks.devdocs.json index 1f4bd13864064..948c932369a7b 100644 --- a/api_docs/kbn_core_base_server_mocks.devdocs.json +++ b/api_docs/kbn_core_base_server_mocks.devdocs.json @@ -37,9 +37,9 @@ "({ env, logger, configService, }?: { env?: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.Env", + "section": "def-server.Env", "text": "Env" }, " | undefined; logger?: jest.Mocked<", @@ -80,9 +80,9 @@ "{ env?: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.Env", + "section": "def-server.Env", "text": "Env" }, " | undefined; logger?: jest.Mocked<", diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index b141b2778690f..2fdcaac2bc28b 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-07-30 +date: 2024-08-01 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 b6f96a90c70ae..995ec4c0c7215 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-07-30 +date: 2024-08-01 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 b7649bd9f4490..18a0249793d06 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-07-30 +date: 2024-08-01 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 21f6c5cb73ec6..a82dafb111cb2 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-07-30 +date: 2024-08-01 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 6570543dc4fb1..511ad134eb3ee 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-07-30 +date: 2024-08-01 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 027c5344b172a..9ea4040b2be4e 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-07-30 +date: 2024-08-01 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 1fd30bef398ad..ad230e21b0d49 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_config_server_internal.devdocs.json index b8e9f014ad528..cc33b0fc5a6d8 100644 --- a/api_docs/kbn_core_config_server_internal.devdocs.json +++ b/api_docs/kbn_core_config_server_internal.devdocs.json @@ -22,9 +22,9 @@ "() => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" }, "[]" diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 9879a8c3b484e..c0142235a9289 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-07-30 +date: 2024-08-01 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 253ac63260294..a28c2fe2d952d 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-07-30 +date: 2024-08-01 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 d4549dd55311a..aa0cfc36dc686 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-07-30 +date: 2024-08-01 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 d1d25ab8f6d83..9f274cb1bfa4c 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-07-30 +date: 2024-08-01 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 3a860fd1bb83d..b4fcefb84695e 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-07-30 +date: 2024-08-01 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 27b5f33417768..a85323730c90b 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-07-30 +date: 2024-08-01 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 3de355bd6a0e7..98f6a2cd33e97 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-07-30 +date: 2024-08-01 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 a09db2255e297..164aa24a8a934 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-07-30 +date: 2024-08-01 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 6afd8a082bea0..d3e569853b085 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-07-30 +date: 2024-08-01 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 ce9be377e8af2..231f5ae8ebf3a 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-07-30 +date: 2024-08-01 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 af474d2741b15..8978e230e74b3 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-07-30 +date: 2024-08-01 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 d4c849dbe4aa1..ee7d93f6d1e08 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-07-30 +date: 2024-08-01 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 8668d85cb9164..07a52e526f06e 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-07-30 +date: 2024-08-01 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 706b504ec80b3..b1df0002797e9 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-07-30 +date: 2024-08-01 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 1820ed857cc58..6402bbf85035e 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-07-30 +date: 2024-08-01 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 29ba3c43380b3..b7a12bfc2367f 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-07-30 +date: 2024-08-01 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 9630dce294eca..df3b388fe7a96 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-07-30 +date: 2024-08-01 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 bd0f9529e409c..e4bbb8e369753 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-07-30 +date: 2024-08-01 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 0aa8f649b4dbc..e08a01ee02728 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-07-30 +date: 2024-08-01 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 f1b289e87ab0e..0a3fb1b17e173 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-07-30 +date: 2024-08-01 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 4cd7df5dd7371..007b5b750a051 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-07-30 +date: 2024-08-01 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 d4ded368c2a49..1b2e74b3d560d 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-07-30 +date: 2024-08-01 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 269d49ac2bdc1..bbfb4f72beb4d 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-07-30 +date: 2024-08-01 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 4e21516c56804..a46f9e036242e 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-07-30 +date: 2024-08-01 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 965ce28e1ac6b..3b5ce1c0505c6 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-07-30 +date: 2024-08-01 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 9e3629383de6e..93e9fa55c0daa 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-07-30 +date: 2024-08-01 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 669c546f6a9e8..a04436c3af866 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-07-30 +date: 2024-08-01 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 d3336b0026175..d1ad2d13c3724 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-07-30 +date: 2024-08-01 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 165da61333a81..3dc7e66d5e79a 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-07-30 +date: 2024-08-01 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 e5dcb85846392..3f237a5ab742e 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-07-30 +date: 2024-08-01 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 cdbb96c7daf07..34e6095170721 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-07-30 +date: 2024-08-01 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 dea1072ac72b3..33d0b3250edd0 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-07-30 +date: 2024-08-01 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 3b27241f4d8fa..0d67b764d10cb 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-07-30 +date: 2024-08-01 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 8cc65068ff048..39143cbdffeba 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-07-30 +date: 2024-08-01 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 28689cc22171f..e84b9da070e93 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-07-30 +date: 2024-08-01 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 c73914fe967e8..e597fbb890991 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-07-30 +date: 2024-08-01 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 a78ce80d6af93..734c54cbc5052 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-07-30 +date: 2024-08-01 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 c62199e3d2690..c77b84d287c6a 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-07-30 +date: 2024-08-01 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 2b62a696631ec..fae9d35eaa1e9 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-07-30 +date: 2024-08-01 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 e70b1a960cbcc..5ea7a8bd28424 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-07-30 +date: 2024-08-01 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 1b86ce8f1e701..e9c4c130f151e 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-07-30 +date: 2024-08-01 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 de5cf64e896ad..29019370253b1 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-07-30 +date: 2024-08-01 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 bf241241fb97c..f3355a81da692 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-07-30 +date: 2024-08-01 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 6d9856ec64a21..6fa02a6fb8f28 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-07-30 +date: 2024-08-01 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 a6276328c5282..b88c895d42b8d 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-07-30 +date: 2024-08-01 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 450e32cc13e6f..9d9ce60eba564 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index f553c6e28d2f8..8751c6033f8fe 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -6236,10 +6236,6 @@ "plugin": "spaces", "path": "x-pack/plugins/spaces/server/routes/api/external/update_objects_spaces.ts" }, - { - "plugin": "serverless", - "path": "x-pack/plugins/serverless/server/plugin.ts" - }, { "plugin": "security", "path": "x-pack/plugins/security/server/routes/api_keys/create.ts" @@ -6324,6 +6320,10 @@ "plugin": "encryptedSavedObjects", "path": "x-pack/plugins/encrypted_saved_objects/server/routes/key_rotation.ts" }, + { + "plugin": "serverless", + "path": "x-pack/plugins/serverless/server/plugin.ts" + }, { "plugin": "actions", "path": "x-pack/plugins/actions/server/routes/get_oauth_access_token.ts" @@ -6426,7 +6426,7 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/unmute_alert.ts" + "path": "x-pack/plugins/alerting/server/routes/rule/apis/unmute_alert/unmute_alert_route.ts" }, { "plugin": "alerting", @@ -7632,14 +7632,6 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/run_soon.test.ts" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/unmute_alert.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/unmute_alert.test.ts" - }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/unmute_all_rule.test.ts" @@ -8140,6 +8132,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/snooze/snooze_rule_route.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/unmute_alert/unmute_alert_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/unmute_alert/unmute_alert_route.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/unsnooze/unsnooze_rule_route.test.ts" @@ -15672,6 +15672,10 @@ "plugin": "unifiedSearch", "path": "src/plugins/unified_search/server/autocomplete/value_suggestions_route.ts" }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/server/routes/log_rate_analysis_field_candidates/define_route.ts" + }, { "plugin": "aiops", "path": "x-pack/plugins/aiops/server/routes/log_rate_analysis/define_route.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 4154602c8cdf5..5baf450d5a3b4 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-07-30 +date: 2024-08-01 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 416f471e654c4..2115b79d86211 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-07-30 +date: 2024-08-01 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 6343a4dc6c1c1..c7c13d3f2a9c6 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-07-30 +date: 2024-08-01 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 b333f1b8af032..dbedd39795da9 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-07-30 +date: 2024-08-01 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 3bae26ca672fb..4e251535c3bc7 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-07-30 +date: 2024-08-01 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 7862d5c10a6c6..49f586853d550 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-07-30 +date: 2024-08-01 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 142f962e78f0c..6214001e8ee9f 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-07-30 +date: 2024-08-01 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 6a0099b7c3566..f6856f68daf20 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-07-30 +date: 2024-08-01 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 827edd34b74bd..500025ca6133d 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-07-30 +date: 2024-08-01 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 dd5e9190a3e08..951b96c2dfe2f 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-07-30 +date: 2024-08-01 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 f3c7c01112432..085acb3c00b4a 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.devdocs.json b/api_docs/kbn_core_lifecycle_browser.devdocs.json index de0a3acb01514..295994fc63a54 100644 --- a/api_docs/kbn_core_lifecycle_browser.devdocs.json +++ b/api_docs/kbn_core_lifecycle_browser.devdocs.json @@ -38,63 +38,21 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; registerEventType: (eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void; registerShipper: (Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void; registerContextProvider: (contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void; removeContextProvider: (contextProviderName: string) => void; }" ], "path": "packages/core/lifecycle/core-lifecycle-browser/src/core_setup.ts", @@ -420,23 +378,11 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; }" ], "path": "packages/core/lifecycle/core-lifecycle-browser/src/core_start.ts", diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 003f97836e279..524e138ceecd5 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-07-30 +date: 2024-08-01 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 3038bb17c83ee..9ee545865a254 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_lifecycle_server.devdocs.json index 06d8f6a9bbfbc..bc9633a4c0006 100644 --- a/api_docs/kbn_core_lifecycle_server.devdocs.json +++ b/api_docs/kbn_core_lifecycle_server.devdocs.json @@ -36,63 +36,21 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; registerEventType: (eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void; registerShipper: (Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void; registerContextProvider: (contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void; removeContextProvider: (contextProviderName: string) => void; }" ], "path": "packages/core/lifecycle/core-lifecycle-server/src/core_preboot.ts", @@ -211,63 +169,21 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; registerEventType: (eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void; registerShipper: (Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void; registerContextProvider: (contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void; removeContextProvider: (contextProviderName: string) => void; }" ], "path": "packages/core/lifecycle/core-lifecycle-server/src/core_setup.ts", @@ -718,23 +634,11 @@ ], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; }" ], "path": "packages/core/lifecycle/core-lifecycle-server/src/core_start.ts", diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 22246f4f1f453..b386e0557976c 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-07-30 +date: 2024-08-01 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 27ca4d003d158..74795a91451a1 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-07-30 +date: 2024-08-01 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 ab556a4196f11..23d0a042b988f 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-07-30 +date: 2024-08-01 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 baf747cd817ff..1715f707860fa 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-07-30 +date: 2024-08-01 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 ef87520420092..e1a9ae9e7d7a7 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-07-30 +date: 2024-08-01 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 b61b5e6df215f..91e279957e0e2 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-07-30 +date: 2024-08-01 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 8c0f50b247164..c0b745d9469b1 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-07-30 +date: 2024-08-01 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 687a4488ff13a..ebae1fd1a8084 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-07-30 +date: 2024-08-01 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 0dcf61f6fdadc..4c7968d1e051b 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-07-30 +date: 2024-08-01 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 aab9c1e0cb895..e4d5327baa526 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-07-30 +date: 2024-08-01 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 3ba7a2f3d9763..c24a69bc6a10b 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-07-30 +date: 2024-08-01 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 9f39d05083ab0..ce7d9ee4d4dc9 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-07-30 +date: 2024-08-01 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 b332d0c3ac36b..3a7671f18aeb2 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-07-30 +date: 2024-08-01 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 4250b7fca4a51..4d7e776afe1eb 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-07-30 +date: 2024-08-01 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 bec4c2ac2d80b..26dfeac08a5cf 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-07-30 +date: 2024-08-01 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 c6c4216edbf82..cfd768dc24b86 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-07-30 +date: 2024-08-01 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 227e901bba14b..68b225c332dc6 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-07-30 +date: 2024-08-01 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 38780beeefbb9..d39cf23db48f6 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-07-30 +date: 2024-08-01 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 0787478292abf..37d3fc99ff219 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_overlays_browser.devdocs.json index 626a14191f5fa..e5c1fc4d6353d 100644 --- a/api_docs/kbn_core_overlays_browser.devdocs.json +++ b/api_docs/kbn_core_overlays_browser.devdocs.json @@ -1070,7 +1070,9 @@ "signature": [ "Omit<", "EuiFlyoutProps", - "<\"div\">, \"onClose\"> & { onClose?: ((flyout: ", + "<\"div\"> | ", + "EuiFlyoutResizableProps", + ", \"onClose\"> & { onClose?: ((flyout: ", { "pluginId": "@kbn/core-mount-utils-browser", "scope": "public", @@ -1078,7 +1080,7 @@ "section": "def-public.OverlayRef", "text": "OverlayRef" }, - ") => void) | undefined; }" + ") => void) | undefined; isResizable?: boolean | undefined; }" ], "path": "packages/core/overlays/core-overlays-browser/src/flyout.ts", "deprecated": false, diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 644c16f6f15df..69f062ead8899 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-07-30 +date: 2024-08-01 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 5d07aa3474062..012fd10f153da 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-07-30 +date: 2024-08-01 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 feae7e5befe2d..e824ef11770d6 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_plugins_browser.devdocs.json index b6348a9176e6d..c6a2d1dc4b9e6 100644 --- a/api_docs/kbn_core_plugins_browser.devdocs.json +++ b/api_docs/kbn_core_plugins_browser.devdocs.json @@ -227,17 +227,17 @@ "{ mode: Readonly<", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.EnvironmentMode", + "section": "def-server.EnvironmentMode", "text": "EnvironmentMode" }, ">; packageInfo: Readonly<", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.PackageInfo", + "section": "def-server.PackageInfo", "text": "PackageInfo" }, ">; }" diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index ccc2b59da843f..97a910ebce3d7 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_plugins_browser_mocks.devdocs.json index 52a4ab88445e1..d426362803488 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.devdocs.json +++ b/api_docs/kbn_core_plugins_browser_mocks.devdocs.json @@ -79,9 +79,9 @@ "(config?: unknown, { buildFlavor }?: { buildFlavor?: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.BuildFlavor", + "section": "def-server.BuildFlavor", "text": "BuildFlavor" }, " | undefined; }) => ", @@ -124,9 +124,9 @@ "{ buildFlavor?: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.BuildFlavor", + "section": "def-server.BuildFlavor", "text": "BuildFlavor" }, " | undefined; }" diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 776e367052d19..41a7ebedd8f44 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-07-30 +date: 2024-08-01 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 d4318a386e4b0..4967aa98ad239 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-07-30 +date: 2024-08-01 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 8c4a7fbc3d041..2a39f3aad360f 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_plugins_server.devdocs.json index 83fb7bac7f377..142c285574d59 100644 --- a/api_docs/kbn_core_plugins_server.devdocs.json +++ b/api_docs/kbn_core_plugins_server.devdocs.json @@ -410,9 +410,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationProvider", + "section": "def-server.ConfigDeprecationProvider", "text": "ConfigDeprecationProvider" }, " | undefined" @@ -564,17 +564,17 @@ "{ mode: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.EnvironmentMode", + "section": "def-server.EnvironmentMode", "text": "EnvironmentMode" }, "; packageInfo: Readonly<", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.PackageInfo", + "section": "def-server.PackageInfo", "text": "PackageInfo" }, ">; instanceUuid: string; configs: readonly string[]; }" diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 4e823031703ce..a7afcee2b6f0d 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-07-30 +date: 2024-08-01 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 7d5430ed2b8ee..5ea489116ec46 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-07-30 +date: 2024-08-01 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 15bbd09ed39d5..29146d6fc2aa8 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-07-30 +date: 2024-08-01 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 a2fbdc2528d01..077a5219aa2fa 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-07-30 +date: 2024-08-01 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 9ecbb01fc4ff1..62745a0530a20 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-07-30 +date: 2024-08-01 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 2da687e63bce2..31c33fbbc0b0b 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-07-30 +date: 2024-08-01 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 fad1ff39a8a2f..b21a7545595e3 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_root_server_internal.devdocs.json index c60f896b2ce2d..85b7cca2fbf1a 100644 --- a/api_docs/kbn_core_root_server_internal.devdocs.json +++ b/api_docs/kbn_core_root_server_internal.devdocs.json @@ -67,9 +67,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.RawConfigurationProvider", + "section": "def-server.RawConfigurationProvider", "text": "RawConfigurationProvider" } ], @@ -88,9 +88,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.Env", + "section": "def-server.Env", "text": "Env" } ], diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 5f78ddd935aa8..a92b245497d2d 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-07-30 +date: 2024-08-01 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 ed42c97efb515..2917cf20409c6 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 819b7a072266a..4dd973ec0fb7e 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 892e1f71e7424..690be2408f69e 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index bc858dcd903c3..9c9e970ce4893 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 18696cda4327e..34d0a626ad38a 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-07-30 +date: 2024-08-01 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 ef61dc2a97ac6..4d23578f78d70 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-07-30 +date: 2024-08-01 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 ccbb8a5d3ba27..98ec26a82ad69 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-07-30 +date: 2024-08-01 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 44235c63241f4..87b91fef56c4a 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-07-30 +date: 2024-08-01 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 e3b93700cabdd..a5b497a7bb419 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-07-30 +date: 2024-08-01 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 332dc2336a9a6..558e2fb648b07 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-07-30 +date: 2024-08-01 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 b42782e216e71..4e5deb1524f38 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-07-30 +date: 2024-08-01 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 aeed82b398445..39dc535d6f194 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-07-30 +date: 2024-08-01 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 9848e11313b4f..1b8e9ecf30ed9 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-07-30 +date: 2024-08-01 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 997eb8966fdc3..cf5c4f599244d 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-07-30 +date: 2024-08-01 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 dbb4c6cb1ce0e..f2537964a457c 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-07-30 +date: 2024-08-01 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 6a04829d5a417..2c649e3a7105f 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-07-30 +date: 2024-08-01 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 5c5154957ad9f..bd3bff31a4969 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-07-30 +date: 2024-08-01 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 7f1ae05fd5f80..77695eeb5e8ef 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-07-30 +date: 2024-08-01 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 e639341e0b304..98bfab9d27aeb 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-07-30 +date: 2024-08-01 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 7c6eae63e813c..9f7c7f424c898 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-07-30 +date: 2024-08-01 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 fc1f348d7db4a..fda8bea201dc9 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-07-30 +date: 2024-08-01 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 a1288d85357ce..7207dc9130f1b 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-07-30 +date: 2024-08-01 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 4865efd9178b7..ec46a4ec1a3ca 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-07-30 +date: 2024-08-01 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 343b3ce19a773..84e2bb642ef5a 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-07-30 +date: 2024-08-01 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 062a7da171ccd..b955e81200dc5 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-07-30 +date: 2024-08-01 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 0e57433315657..2fe7aee9f2f7f 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-07-30 +date: 2024-08-01 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 33cb93fb9344b..968eeb9eed438 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_status_server_internal.devdocs.json index dddd1a97097d8..63c08a5cd2861 100644 --- a/api_docs/kbn_core_status_server_internal.devdocs.json +++ b/api_docs/kbn_core_status_server_internal.devdocs.json @@ -287,63 +287,21 @@ "description": [], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; registerEventType: (eventTypeOps: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.EventTypeOpts", - "text": "EventTypeOpts" - }, + "EventTypeOpts", ") => void; registerShipper: (Shipper: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ShipperClassConstructor", - "text": "ShipperClassConstructor" - }, + "ShipperClassConstructor", ", shipperConfig: ShipperConfig, opts?: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.RegisterShipperOpts", - "text": "RegisterShipperOpts" - }, + "RegisterShipperOpts", " | undefined) => void; registerContextProvider: (contextProviderOpts: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.ContextProviderOpts", - "text": "ContextProviderOpts" - }, + "ContextProviderOpts", ") => void; removeContextProvider: (contextProviderName: string) => void; }" ], "path": "packages/core/status/core-status-server-internal/src/status_service.ts", diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 9106095d91893..3adbc1626bfca 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-07-30 +date: 2024-08-01 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 11bb4a473a943..4503715ee12ec 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_test_helpers_deprecations_getters.devdocs.json index 0ef892f765ed5..3205388600f03 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.devdocs.json +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.devdocs.json @@ -30,9 +30,9 @@ "({ provider, settings, path, }: { provider: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationProvider", + "section": "def-server.ConfigDeprecationProvider", "text": "ConfigDeprecationProvider" }, "; settings?: Record | undefined; path: string; }) => { messages: string[]; levels: string[]; migrated: Record; }" @@ -63,17 +63,17 @@ "(factory: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" }, ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" }, "[]" @@ -93,9 +93,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" } ], @@ -147,9 +147,9 @@ "({ provider, settings, }: { provider: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationProvider", + "section": "def-server.ConfigDeprecationProvider", "text": "ConfigDeprecationProvider" }, "; settings?: Record | undefined; }) => { messages: string[]; levels: string[]; migrated: Record; }" @@ -180,17 +180,17 @@ "(factory: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" }, ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" }, "[]" @@ -210,9 +210,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" } ], diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 1f5ba3ecc4a1e..a20e14d32879d 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-07-30 +date: 2024-08-01 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 bf44e93e6e4f6..3772660ef4c38 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-07-30 +date: 2024-08-01 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 a22e5119f1c83..16bd64136cd4c 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-07-30 +date: 2024-08-01 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 a63a87c75e64a..2c55e0d48cbf3 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-07-30 +date: 2024-08-01 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 a876e2f9614e3..2d602d6959f54 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-07-30 +date: 2024-08-01 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 15130aaa99c29..305fbd9d6aede 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-07-30 +date: 2024-08-01 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 97c7526bc3dfd..024eda799383f 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-07-30 +date: 2024-08-01 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 d51a5f91ea1f5..bac57935e9e46 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-07-30 +date: 2024-08-01 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 25091fc4f7343..3fc07fc9356ed 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-07-30 +date: 2024-08-01 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 65d7d2fbb08fc..95bca49e07c8f 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-07-30 +date: 2024-08-01 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 4557399025ed0..5e669e63bf5fd 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-07-30 +date: 2024-08-01 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 c490d3445ef8a..10a082b373faa 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-07-30 +date: 2024-08-01 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 e9c5f129f9147..92056d70c1b03 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_core_ui_settings_server_internal.devdocs.json index 5b281b398dc45..f07afb4f2d383 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.devdocs.json +++ b/api_docs/kbn_core_ui_settings_server_internal.devdocs.json @@ -342,17 +342,17 @@ "(factory: ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" }, ") => ", { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecation", + "section": "def-server.ConfigDeprecation", "text": "ConfigDeprecation" }, "[]" @@ -372,9 +372,9 @@ "signature": [ { "pluginId": "@kbn/config", - "scope": "common", + "scope": "server", "docId": "kibKbnConfigPluginApi", - "section": "def-common.ConfigDeprecationFactory", + "section": "def-server.ConfigDeprecationFactory", "text": "ConfigDeprecationFactory" } ], diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index b5eb1863821f9..72a387376ebff 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-07-30 +date: 2024-08-01 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 989b8bb0e5224..35c61959bf536 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-07-30 +date: 2024-08-01 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 8ac8b4dca7857..e92a4f924a25c 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-07-30 +date: 2024-08-01 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 9ed7e93b247ca..7b56de1a8b347 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-07-30 +date: 2024-08-01 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 32d8aaeff0fd2..cac8ab6b1ee51 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-07-30 +date: 2024-08-01 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 f492220754ffb..aea54b3c5b8fc 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-07-30 +date: 2024-08-01 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 1de9aed7cfb7e..2dc3215493571 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-07-30 +date: 2024-08-01 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 c88354d0cfda2..dfa7e9fc2e758 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-07-30 +date: 2024-08-01 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 dc1ecdb354af6..2e06d121476ad 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-07-30 +date: 2024-08-01 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 c9796dd05458f..c9b1d3f8bb631 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-07-30 +date: 2024-08-01 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 afbd09ee0880b..42d4dfde74910 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-07-30 +date: 2024-08-01 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 12c687c7a3ec3..b2b172ab7573c 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-07-30 +date: 2024-08-01 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 8feccbd569c9d..354e91babdd67 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-07-30 +date: 2024-08-01 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 18fb5f3290913..00cc0f33ff8ca 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-07-30 +date: 2024-08-01 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 cf45ae7352f6f..5aebe415f2d64 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-07-30 +date: 2024-08-01 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 4f4df96dc058a..851d0bdc2dc3a 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-07-30 +date: 2024-08-01 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 3656307aa3169..1b90d8cb7fd8a 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-07-30 +date: 2024-08-01 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 33a4fc36aa951..20b03159eb028 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-07-30 +date: 2024-08-01 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 8338c1566fe14..c55234df617e8 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-07-30 +date: 2024-08-01 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 ec67616da44be..38759e9a766f6 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-07-30 +date: 2024-08-01 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 0a8804e3254ad..3b65a80daa262 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-07-30 +date: 2024-08-01 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 b61e72a504b87..879bc689099bd 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-07-30 +date: 2024-08-01 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 350a63de1c200..61c7cd85c2e8a 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-07-30 +date: 2024-08-01 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 ab1f4beb20355..0a56f13311eda 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-07-30 +date: 2024-08-01 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 6a79517353f93..a3fc2cc2cfce1 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-07-30 +date: 2024-08-01 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 49d2cf5bba999..3b5b138f9f123 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-07-30 +date: 2024-08-01 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 d8893663836c2..72da07c03c3c5 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-07-30 +date: 2024-08-01 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 deceabb187ea3..3ffd767d46b58 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-07-30 +date: 2024-08-01 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 d39000f177b65..2c08b2a130fc6 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-07-30 +date: 2024-08-01 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 c5627292935c9..1ba8d402e0b68 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-07-30 +date: 2024-08-01 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 668632c443f04..59efc45580545 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-07-30 +date: 2024-08-01 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 d9d84085de2ea..47708265bfbc9 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-07-30 +date: 2024-08-01 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 02646cc5498a5..881ba3ef671a5 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-07-30 +date: 2024-08-01 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 01766ea6d2e1e..feece7b451687 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-07-30 +date: 2024-08-01 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 f84d6b4ef130b..1c8c332b72815 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-07-30 +date: 2024-08-01 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 2907d109b82a2..2fff94670b39d 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-07-30 +date: 2024-08-01 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 a1640483bb55d..5b596063fe405 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-07-30 +date: 2024-08-01 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 c367e2a24159a..a9633013803ee 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-07-30 +date: 2024-08-01 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 9a4dbbdc0ba1f..c77ced15aeb4d 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-07-30 +date: 2024-08-01 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 87fadad7315e0..a6518165afdd4 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-07-30 +date: 2024-08-01 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 1cc92fbd7b6f7..4c582dfae3afd 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-07-30 +date: 2024-08-01 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 ae860bdd81f04..3702aa5c157f2 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-07-30 +date: 2024-08-01 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 fac12be5cbdd8..df696bff0b20e 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.devdocs.json b/api_docs/kbn_docs_utils.devdocs.json index da6dd5935a733..1afbc1016d3d3 100644 --- a/api_docs/kbn_docs_utils.devdocs.json +++ b/api_docs/kbn_docs_utils.devdocs.json @@ -9,19 +9,11 @@ "objects": [] }, "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { "classes": [], "functions": [ { "parentPluginId": "@kbn/docs-utils", - "id": "def-common.findPlugins", + "id": "def-server.findPlugins", "type": "Function", "tags": [], "label": "findPlugins", @@ -37,7 +29,7 @@ "children": [ { "parentPluginId": "@kbn/docs-utils", - "id": "def-common.findPlugins.$1", + "id": "def-server.findPlugins.$1", "type": "Array", "tags": [], "label": "pluginOrPackageFilter", @@ -56,7 +48,7 @@ }, { "parentPluginId": "@kbn/docs-utils", - "id": "def-common.findTeamPlugins", + "id": "def-server.findTeamPlugins", "type": "Function", "tags": [], "label": "findTeamPlugins", @@ -72,7 +64,7 @@ "children": [ { "parentPluginId": "@kbn/docs-utils", - "id": "def-common.findTeamPlugins.$1", + "id": "def-server.findTeamPlugins.$1", "type": "string", "tags": [], "label": "team", @@ -91,7 +83,7 @@ }, { "parentPluginId": "@kbn/docs-utils", - "id": "def-common.runBuildApiDocsCli", + "id": "def-server.runBuildApiDocsCli", "type": "Function", "tags": [], "label": "runBuildApiDocsCli", @@ -111,5 +103,13 @@ "enums": [], "misc": [], "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index d6752d9764c52..6639ee0673221 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; @@ -23,8 +23,8 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban |-------------------|-----------|------------------------|-----------------| | 5 | 0 | 5 | 1 | -## Common +## Server ### Functions - + diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 6703932518c0c..3a2016ae678c6 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-07-30 +date: 2024-08-01 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.mdx b/api_docs/kbn_ebt.mdx index e825e553407c3..a205229653380 100644 --- a/api_docs/kbn_ebt.mdx +++ b/api_docs/kbn_ebt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt title: "@kbn/ebt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt plugin -date: 2024-07-30 +date: 2024-07-31 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt'] --- import kbnEbtObj from './kbn_ebt.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.devdocs.json b/api_docs/kbn_ebt_tools.devdocs.json index 44363fefececf..4accaa3356967 100644 --- a/api_docs/kbn_ebt_tools.devdocs.json +++ b/api_docs/kbn_ebt_tools.devdocs.json @@ -64,13 +64,7 @@ ], "signature": [ "(analytics: Pick<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.IAnalyticsClient", - "text": "IAnalyticsClient" - }, + "IAnalyticsClient", ", \"registerEventType\">) => void" ], "path": "packages/kbn-ebt-tools/src/performance_metric_events/helpers.ts", @@ -88,13 +82,7 @@ ], "signature": [ "Pick<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.IAnalyticsClient", - "text": "IAnalyticsClient" - }, + "IAnalyticsClient", ", \"registerEventType\">" ], "path": "packages/kbn-ebt-tools/src/performance_metric_events/helpers.ts", @@ -117,13 +105,7 @@ ], "signature": [ "(analytics: Pick<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.IAnalyticsClient", - "text": "IAnalyticsClient" - }, + "IAnalyticsClient", ", \"reportEvent\">, eventData: ", { "pluginId": "@kbn/ebt-tools", @@ -149,13 +131,7 @@ ], "signature": [ "Pick<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.IAnalyticsClient", - "text": "IAnalyticsClient" - }, + "IAnalyticsClient", ", \"reportEvent\">" ], "path": "packages/kbn-ebt-tools/src/performance_metric_events/helpers.ts", diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 028ac1f15b769..78fd52bffc735 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-07-30 +date: 2024-08-01 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 7dae2becc4f1d..da3abe3790c23 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-07-30 +date: 2024-08-01 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 e9beb5fe7f3f5..9272a8fe364c1 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-07-30 +date: 2024-08-01 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 f397b7724d5ea..54405de5f412d 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index 7ba7ee84ca6e9..703a1f2b44cd4 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -4205,7 +4205,7 @@ "\nDefault features available to the elastic assistant" ], "signature": [ - "{ readonly assistantKnowledgeBaseByDefault: false; readonly assistantModelEvaluation: false; readonly assistantBedrockChat: false; }" + "{ readonly assistantKnowledgeBaseByDefault: false; readonly assistantModelEvaluation: false; readonly assistantBedrockChat: true; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts", "deprecated": false, diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index d96f3a87acb32..a3be49909b28f 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.devdocs.json b/api_docs/kbn_entities_schema.devdocs.json index f8a943faf01b5..5a095101476e4 100644 --- a/api_docs/kbn_entities_schema.devdocs.json +++ b/api_docs/kbn_entities_schema.devdocs.json @@ -18,7 +18,41 @@ }, "common": { "classes": [], - "functions": [], + "functions": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.durationSchemaWithMinimum", + "type": "Function", + "tags": [], + "label": "durationSchemaWithMinimum", + "description": [], + "signature": [ + "(minimumMinutes: number) => Zod.ZodEffects" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.durationSchemaWithMinimum.$1", + "type": "number", + "tags": [], + "label": "minimumMinutes", + "description": [], + "signature": [ + "number" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], "interfaces": [], "enums": [ { @@ -43,7 +77,7 @@ "label": "EntityDefinition", "description": [], "signature": [ - "{ id: string; type: string; version: string; name: string; history: { interval: moment.Duration; timestampField: string; settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: moment.Duration | undefined; backfillFrequency?: string | undefined; } | undefined; }; managed: boolean; indexPatterns: string[]; identityFields: ({ field: string; optional: boolean; } | { field: string; optional: boolean; })[]; displayNameTemplate: string; filter?: string | undefined; description?: string | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", + "{ id: string; type: string; version: string; name: string; history: { interval: string; settings: { lookbackPeriod: string; frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }; timestampField: string; }; managed: boolean; indexPatterns: string[]; identityFields: ({ field: string; optional: boolean; } | { field: string; optional: boolean; })[]; displayNameTemplate: string; filter?: string | undefined; description?: string | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", { "pluginId": "@kbn/entities-schema", "scope": "common", @@ -236,7 +270,7 @@ "label": "durationSchema", "description": [], "signature": [ - "Zod.ZodEffects" + "Zod.ZodString" ], "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", "deprecated": false, @@ -291,7 +325,7 @@ "section": "def-common.BasicAggregations", "text": "BasicAggregations" }, - "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }>, \"many\">>; staticFields: Zod.ZodOptional>; managed: Zod.ZodDefault>; history: Zod.ZodObject<{ timestampField: Zod.ZodString; interval: Zod.ZodEffects, moment.Duration, string>; settings: Zod.ZodOptional; syncDelay: Zod.ZodOptional; frequency: Zod.ZodOptional; backfillSyncDelay: Zod.ZodOptional; backfillLookbackPeriod: Zod.ZodOptional>; backfillFrequency: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: moment.Duration | undefined; backfillFrequency?: string | undefined; }, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { interval: moment.Duration; timestampField: string; settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: moment.Duration | undefined; backfillFrequency?: string | undefined; } | undefined; }, { interval: string; timestampField: string; settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; } | undefined; }>; latest: Zod.ZodOptional; syncDelay: Zod.ZodOptional; frequency: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; }, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; } | undefined; }, { settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; } | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; type: string; version: string; name: string; history: { interval: moment.Duration; timestampField: string; settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: moment.Duration | undefined; backfillFrequency?: string | undefined; } | undefined; }; managed: boolean; indexPatterns: string[]; identityFields: ({ field: string; optional: boolean; } | { field: string; optional: boolean; })[]; displayNameTemplate: string; filter?: string | undefined; description?: string | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }>, \"many\">>; staticFields: Zod.ZodOptional>; managed: Zod.ZodDefault>; history: Zod.ZodObject<{ timestampField: Zod.ZodString; interval: Zod.ZodEffects; settings: Zod.ZodEffects; syncDelay: Zod.ZodOptional; lookbackPeriod: Zod.ZodDefault>; frequency: Zod.ZodOptional; backfillSyncDelay: Zod.ZodOptional; backfillLookbackPeriod: Zod.ZodOptional; backfillFrequency: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { lookbackPeriod: string; frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; lookbackPeriod?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }>>, { lookbackPeriod: string; frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; lookbackPeriod?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; } | undefined>; }, \"strip\", Zod.ZodTypeAny, { interval: string; settings: { lookbackPeriod: string; frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }; timestampField: string; }, { interval: string; timestampField: string; settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; lookbackPeriod?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; } | undefined; }>; latest: Zod.ZodOptional; syncDelay: Zod.ZodOptional; frequency: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; }, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; } | undefined; }, { settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; } | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; type: string; version: string; name: string; history: { interval: string; settings: { lookbackPeriod: string; frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }; timestampField: string; }; managed: boolean; indexPatterns: string[]; identityFields: ({ field: string; optional: boolean; } | { field: string; optional: boolean; })[]; displayNameTemplate: string; filter?: string | undefined; description?: string | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", { "pluginId": "@kbn/entities-schema", "scope": "common", @@ -299,7 +333,7 @@ "section": "def-common.BasicAggregations", "text": "BasicAggregations" }, - "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; metadata?: ({ destination: string; limit: number; source: string; } | { source: string; destination: string; limit: number; })[] | undefined; latest?: { settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; } | undefined; } | undefined; staticFields?: Record | undefined; }, { id: string; type: string; version: string; name: string; history: { interval: string; timestampField: string; settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; } | undefined; }; indexPatterns: string[]; identityFields: (string | { field: string; optional: boolean; })[]; displayNameTemplate: string; filter?: string | undefined; description?: string | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", + "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; metadata?: ({ destination: string; limit: number; source: string; } | { source: string; destination: string; limit: number; })[] | undefined; latest?: { settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; } | undefined; } | undefined; staticFields?: Record | undefined; }, { id: string; type: string; version: string; name: string; history: { interval: string; timestampField: string; settings?: { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; lookbackPeriod?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; } | undefined; }; indexPatterns: string[]; identityFields: (string | { field: string; optional: boolean; })[]; displayNameTemplate: string; filter?: string | undefined; description?: string | undefined; metrics?: { name: string; metrics: ({ name: string; field: string; aggregation: ", { "pluginId": "@kbn/entities-schema", "scope": "common", @@ -374,6 +408,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.historySettingsSchema", + "type": "Object", + "tags": [], + "label": "historySettingsSchema", + "description": [], + "signature": [ + "Zod.ZodEffects; syncDelay: Zod.ZodOptional; lookbackPeriod: Zod.ZodDefault>; frequency: Zod.ZodOptional; backfillSyncDelay: Zod.ZodOptional; backfillLookbackPeriod: Zod.ZodOptional; backfillFrequency: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { lookbackPeriod: string; frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; lookbackPeriod?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }>>, { lookbackPeriod: string; frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }, { frequency?: string | undefined; syncDelay?: string | undefined; syncField?: string | undefined; lookbackPeriod?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; } | undefined>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/entities-schema", "id": "def-common.identityFieldsSchema", diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 28e449ac36dcc..0e1d28098a824 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; @@ -21,13 +21,16 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 23 | 0 | 23 | 0 | +| 26 | 0 | 26 | 0 | ## Common ### Objects +### Functions + + ### Enums diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 3741d90dbfb40..214a8ad72f817 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-07-30 +date: 2024-08-01 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 0ce84c2bd3f9a..5773b1879d55a 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-07-30 +date: 2024-08-01 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 16fe81f5e6610..6dbe382f3f03f 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-07-30 +date: 2024-08-01 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 9a6485000b800..9b3298d3d8676 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-07-30 +date: 2024-08-01 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 6ec771de3757d..60356753323cd 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-07-30 +date: 2024-08-01 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 b51b1adf4a827..b7aa16b6b2e66 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-07-30 +date: 2024-08-01 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 b3fe2cb3cc01d..bb4444bab7146 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.devdocs.json b/api_docs/kbn_esql_utils.devdocs.json index 5ac4aecf1acdf..6423998036e33 100644 --- a/api_docs/kbn_esql_utils.devdocs.json +++ b/api_docs/kbn_esql_utils.devdocs.json @@ -160,6 +160,62 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.formatESQLColumns", + "type": "Function", + "tags": [], + "label": "formatESQLColumns", + "description": [], + "signature": [ + "(columns: ", + { + "pluginId": "@kbn/es-types", + "scope": "common", + "docId": "kibKbnEsTypesPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + }, + "[]) => ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + }, + "[]" + ], + "path": "packages/kbn-esql-utils/src/utils/run_query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.formatESQLColumns.$1", + "type": "Array", + "tags": [], + "label": "columns", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-types", + "scope": "common", + "docId": "kibKbnEsTypesPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + }, + "[]" + ], + "path": "packages/kbn-esql-utils/src/utils/run_query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-utils", "id": "def-common.getESQLAdHocDataview", diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 0b4bb34704723..70edfdeeee18f 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 63 | 0 | 59 | 0 | +| 65 | 0 | 61 | 0 | ## Common diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 7524fb40d93d3..2f4602125a193 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-07-30 +date: 2024-08-01 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 7adc41bb2d365..db36114f70d72 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-07-30 +date: 2024-08-01 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 e162e8f683b99..9139481567930 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-07-30 +date: 2024-08-01 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 54d3d59a26f2f..2049c52301262 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-07-30 +date: 2024-08-01 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 0ac5958a62ffe..c0b0c5a080cef 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-07-30 +date: 2024-08-01 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 39ddf2b1b30d6..59dc098e2d068 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-07-30 +date: 2024-08-01 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 f06f9fe91c939..48990a149ad1c 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-07-30 +date: 2024-08-01 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 0bfcc21b863b2..e34d143b66d96 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-07-30 +date: 2024-08-01 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 07b6c73e8d784..23dfe1b591029 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-07-30 +date: 2024-08-01 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 463b02da480e3..871fe27927658 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-07-30 +date: 2024-08-01 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 cba6d292f4a09..fda7a7ac727b5 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-07-30 +date: 2024-08-01 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 1e7038202483b..f6ec1aa4942ff 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-07-30 +date: 2024-08-01 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 5bfd89555b096..2211492963085 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 39487e88e5bd8..26c22b58035c3 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 6831bbb9d35e4..a7c6b987506a0 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-07-30 +date: 2024-08-01 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 8006a8f68b046..61c6732cdfcd4 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-07-30 +date: 2024-08-01 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 c527ec19cf439..f565f144f55e0 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-07-30 +date: 2024-08-01 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 9f1ff3825390a..08d70dbda6cc4 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-07-30 +date: 2024-08-01 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 f758c27f1d0b4..b5b2e23b0e391 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-07-30 +date: 2024-08-01 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 c3d8f8d592816..633e4743e068a 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-07-30 +date: 2024-08-01 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 3acc9911e9055..1567b6dc094a0 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-07-30 +date: 2024-08-01 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 518da5f7c64bf..3c0c936343d50 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-07-30 +date: 2024-08-01 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 6ab52418dd426..6eb81da9ddf16 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-07-30 +date: 2024-08-01 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 a495efdd6dee0..b31e60a771f9a 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-07-30 +date: 2024-08-01 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 e8f3987321994..4ab881401629d 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-07-30 +date: 2024-08-01 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 a5b98138e6cd0..ab95f21675339 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-07-30 +date: 2024-08-01 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 6cf23602107a2..9afb2ace22add 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-07-30 +date: 2024-08-01 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 ec3d050e37d64..2af389c7744bc 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-07-30 +date: 2024-08-01 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 90e80b5089e3a..bb4afd28e8217 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-07-30 +date: 2024-08-01 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 527823332b9ec..90b37498d26ae 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-07-30 +date: 2024-08-01 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 bbeb9b1caa126..0e5eea496469a 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-07-30 +date: 2024-08-01 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 a05accb19e3ec..6ba93c58e4482 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 96889fefc6a7a..19e7c60427595 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index a28e09f59c0d5..3e95aba1cf0b9 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-07-30 +date: 2024-08-01 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 fde59ef7756b6..e220688d38087 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-07-30 +date: 2024-08-01 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 53152ff1695ce..7670e0d43d0ad 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-07-30 +date: 2024-08-01 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 63249f34599c0..4ca520a65926b 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-07-30 +date: 2024-08-01 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 e5ce3d8bdaaff..c5307109b670a 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-07-30 +date: 2024-08-01 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 a0212de91d3cb..cb90d4b810342 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-07-30 +date: 2024-08-01 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 c7cccc81b7c89..0467c4a466e17 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-07-30 +date: 2024-08-01 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 2ee6b9f37481b..8086b61bb2e28 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-07-30 +date: 2024-08-01 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 477f69979cd83..1cd7ba9911d9b 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-07-30 +date: 2024-08-01 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 0b4b39112dd49..30dffcc876a54 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-07-30 +date: 2024-08-01 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 f9523b14733db..70763d0b25267 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-07-30 +date: 2024-08-01 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 43ecd63b82a0d..97fac3292f4c0 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-07-30 +date: 2024-08-01 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 9b76cc6ac9712..4c98218aaa495 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-07-30 +date: 2024-08-01 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 835af503e1698..0923c34f8129e 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-07-30 +date: 2024-08-01 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 6b0529faa2437..84ebb57b997b4 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-07-30 +date: 2024-08-01 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 8acc03b273087..cd3360e9fa88b 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-07-30 +date: 2024-08-01 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 6af5bf8b2821e..d8386339ed357 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-07-30 +date: 2024-08-01 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 c3b277d5c2133..25a47343eba81 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-07-30 +date: 2024-08-01 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 18d3b7b6669c5..49641710d83dd 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-07-30 +date: 2024-08-01 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 817d0e0d4dba0..8e6d61bc9f487 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-07-30 +date: 2024-08-01 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 568be497d64c3..03b640eb7b6e3 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-07-30 +date: 2024-08-01 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 eb91be891e0d6..2bc705f8aee9a 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-07-30 +date: 2024-08-01 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 4a1dced5d0be5..0371132f74f6d 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-07-30 +date: 2024-08-01 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 5fa59874cc31c..0ffa23e91f349 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-07-30 +date: 2024-08-01 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 a81a9dd9a020b..cf20fd2deb0eb 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-07-30 +date: 2024-08-01 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 48bc0f2f2c82e..76218b1fc75f0 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-07-30 +date: 2024-08-01 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 5953aaae49da4..2f5032a4516bb 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-07-30 +date: 2024-08-01 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 92052f202d30c..48fe5ab837721 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-07-30 +date: 2024-08-01 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 2f3a154543fb2..c024022721ff0 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-07-30 +date: 2024-08-01 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 15e8e31cc4929..65d4c142ae313 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-07-30 +date: 2024-08-01 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 0820902eebf50..c74c7e7db1049 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-07-30 +date: 2024-08-01 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 91cde24aa1572..be163bdf86264 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-07-30 +date: 2024-08-01 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 0492a8c4d55dc..dfde51856a67c 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-07-30 +date: 2024-08-01 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 52d46119bb597..32fdc5f6a5747 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-07-30 +date: 2024-08-01 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 3f729c19edea1..a15bbde96f51a 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-07-30 +date: 2024-08-01 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 05acf92620392..74652218b0d5d 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-07-30 +date: 2024-08-01 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 35c0cdcaf1fba..ec9d380ee1744 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-07-30 +date: 2024-08-01 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 e43404163b252..6798e7b4d65d6 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-07-30 +date: 2024-08-01 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 cbe095e8f6776..118b2e767db7b 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-07-30 +date: 2024-08-01 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 4160c05104e8a..024b172af528e 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-07-30 +date: 2024-08-01 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 d781f8d1fd695..27f912784b201 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-07-30 +date: 2024-08-01 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 6ac9948b64e5a..2fc1435757a5b 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-07-30 +date: 2024-08-01 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 802f112e5b786..4df6c75f4cb85 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-07-30 +date: 2024-08-01 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 089cb9d26cc77..3c77532ed2288 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-07-30 +date: 2024-08-01 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 3a2589c1e09d6..9033be728dc96 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_ml_trained_models_utils.devdocs.json index ae77700bbd77e..e8158b9a149ec 100644 --- a/api_docs/kbn_ml_trained_models_utils.devdocs.json +++ b/api_docs/kbn_ml_trained_models_utils.devdocs.json @@ -459,7 +459,7 @@ "label": "InferenceAPIConfigResponse", "description": [], "signature": [ - "{ model_id: string; task_type: \"sparse_embedding\" | \"text_embedding\"; task_settings: { model?: string | undefined; }; } & ", + "{ inference_id: string; task_type: \"sparse_embedding\" | \"text_embedding\"; task_settings: { model?: string | undefined; }; } & ", "InferenceServiceSettings" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 33ba67927f01f..14c75d20bf72e 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-07-30 +date: 2024-08-01 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 7923d043bfe56..3716fc0eb1187 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-07-30 +date: 2024-08-01 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 e619bec88b297..b04874db14a9d 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-07-30 +date: 2024-08-01 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 e494c022fda3e..17112ef2122b9 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-07-30 +date: 2024-08-01 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 a169f6d3eaea4..26bc748ab2ed1 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-07-30 +date: 2024-08-01 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 74677a50f0f9d..88e051bf6492d 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-07-30 +date: 2024-08-01 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 aed9c57e4429d..929d7f97239a3 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-07-30 +date: 2024-08-01 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_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 61a06badbcfcd..d5f3604bf61f8 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 8befee371b647..54116c2d3cc2a 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-07-30 +date: 2024-08-01 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 fd9a44e6e4870..29d58c5478d84 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_openapi_bundler.devdocs.json index 88416712a8dda..9d455aa69f752 100644 --- a/api_docs/kbn_openapi_bundler.devdocs.json +++ b/api_docs/kbn_openapi_bundler.devdocs.json @@ -209,9 +209,7 @@ "label": "options", "description": [], "signature": [ - "{ mergedSpecInfo?: Partial<", - "OpenAPIV3", - ".InfoObject> | undefined; conflictsResolution?: { prependComponentsWith: \"title\"; } | undefined; } | undefined" + "MergerOptions | undefined" ], "path": "packages/kbn-openapi-bundler/src/openapi_merger.ts", "deprecated": false, diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index c96e1227f6630..63372b1210d96 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-07-30 +date: 2024-08-01 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 52db2e344d696..ef42b97d161ed 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-07-30 +date: 2024-08-01 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 e9c631e0fcdb6..8ff9bf100e506 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-07-30 +date: 2024-08-01 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 aaf34a043360c..037622fd31c00 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-07-30 +date: 2024-08-01 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 23de28ae427d0..ba5dce47ca90c 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-07-30 +date: 2024-08-01 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 74c9bc0d8f95a..afaefffa851a0 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-07-30 +date: 2024-08-01 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 e96e23af38a86..ced9ea2096371 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_plugin_check.devdocs.json index 28ee612a740a9..794be230733e3 100644 --- a/api_docs/kbn_plugin_check.devdocs.json +++ b/api_docs/kbn_plugin_check.devdocs.json @@ -9,19 +9,11 @@ "objects": [] }, "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { "classes": [], "functions": [ { "parentPluginId": "@kbn/plugin-check", - "id": "def-common.runPluginCheckCli", + "id": "def-server.runPluginCheckCli", "type": "Function", "tags": [], "label": "runPluginCheckCli", @@ -43,5 +35,13 @@ "enums": [], "misc": [], "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index c931fce0bd6f9..a304910a3b910 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; @@ -23,8 +23,8 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh |-------------------|-----------|------------------------|-----------------| | 1 | 0 | 0 | 0 | -## Common +## Server ### Functions - + diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 7e18755c7f970..d5bbad482ee41 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-07-30 +date: 2024-08-01 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 2512de06ab7c7..3c7a419673b26 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-07-30 +date: 2024-08-01 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 5efbf5383f768..4e68a0fefd030 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-07-30 +date: 2024-08-01 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 d22bb4bb5b15c..ed6992cac46ed 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-07-30 +date: 2024-08-01 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 5e4664ebef5be..e2fd9d147e53c 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-07-30 +date: 2024-08-01 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 f1e6943b74537..50dd8c3b2b1e3 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-07-30 +date: 2024-08-01 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 06245468a9446..028e42093ac0c 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-07-30 +date: 2024-08-01 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 5f5f8c00062ef..9c5f50ccf4a76 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-07-30 +date: 2024-08-01 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 87bfdf8fbfa62..dccb65f1c17d0 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-07-30 +date: 2024-08-01 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 828d9c34639d5..94ef39a423494 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-07-30 +date: 2024-08-01 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 d903430276fc8..efc90b0f417cc 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-07-30 +date: 2024-08-01 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 d4d79a59d3500..441d7749cd2db 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-07-30 +date: 2024-08-01 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 50d5930dd7498..0c164461e518d 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-07-30 +date: 2024-08-01 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 25287d1e5121a..ffafc49224a26 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 153ba757ecfba..c7b17419dfd44 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 1960e76d166d9..7b6772c584e41 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-07-30 +date: 2024-08-01 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 ea46ec643dd22..3d658d9ffdddd 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-07-30 +date: 2024-08-01 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 d0aee250e0c51..fb99cfdec10b6 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-07-30 +date: 2024-08-01 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 3c64cbb29283d..2d16f740bc07e 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-07-30 +date: 2024-08-01 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 d78d79e1d7160..f351d40946874 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-07-30 +date: 2024-08-01 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 f56f53b5e2903..403f39c790a03 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-07-30 +date: 2024-08-01 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 fa26c2a100285..af23e79a469bb 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-07-30 +date: 2024-08-01 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 0fa7d009c6822..b1d4296f5e470 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-07-30 +date: 2024-08-01 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 5ad0e4c52f15f..e7beab352a9d8 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-07-30 +date: 2024-08-01 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 152a44ba6ef65..cffb408f513cf 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-07-30 +date: 2024-08-01 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 1788b1e47ef21..303cf833316b1 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-07-30 +date: 2024-08-01 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 790c9cb7e87fc..1a1566dfdb2de 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-07-30 +date: 2024-08-01 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 85b34a9afae6b..c46ded0081348 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 96117d9ae219b..4f4dfad73e355 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 27af5a2c3a766..83f3afe2c13e6 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-07-30 +date: 2024-08-01 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 1c1e5d2934a89..293cdb3f68109 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index c27839b45ea41..4393498ff91dc 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 4bb4d9ac2b3eb..3b29506dff6b4 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 6ad738e9b689e..0867f1c9369bf 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 7efaac95e0449..d789d5bfd8a3a 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-07-30 +date: 2024-08-01 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 bd47acaa7fc1d..78b4382721823 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-07-30 +date: 2024-08-01 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 46092536c1545..bda7ef8e0a1f0 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-07-30 +date: 2024-08-01 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 6af72e2e97953..7795583ec45dd 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-07-30 +date: 2024-08-01 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 d010c9f8fec37..baadb225583bf 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-07-30 +date: 2024-08-01 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 254448e84b407..7d2c51b325582 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 07836d532f632..8a3844dadafb8 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index aca6059f7f40e..564f4b36cb698 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-07-30 +date: 2024-08-01 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 1c67bd5f102bc..84fea22378875 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-07-30 +date: 2024-08-01 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 1f55956fea689..b191268b3cb33 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-07-30 +date: 2024-08-01 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 099488e1d80a6..f394b99c94901 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 874e8799ab17b..2eb562193e339 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 8cd10f85b12aa..bf4a92d130b9e 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index ea6972bdbf089..2fcb13a1a3456 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-07-30 +date: 2024-08-01 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 1307bc613d704..209c94c1cafd8 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-07-30 +date: 2024-08-01 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 01ff666d6d37d..7efc0945c6521 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-07-30 +date: 2024-08-01 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.devdocs.json b/api_docs/kbn_security_plugin_types_server.devdocs.json index abb4a1d8b9e5f..2dc9cb998613d 100644 --- a/api_docs/kbn_security_plugin_types_server.devdocs.json +++ b/api_docs/kbn_security_plugin_types_server.devdocs.json @@ -4344,10 +4344,6 @@ "plugin": "entityManager", "path": "x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/disable.ts" }, - { - "plugin": "observabilityOnboarding", - "path": "x-pack/plugins/observability_solution/observability_onboarding/server/routes/flow/route.ts" - }, { "plugin": "synthetics", "path": "x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.ts" diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index e310b41df1ccb..110dab7edfefd 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-07-30 +date: 2024-08-01 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_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index f80d2c071c730..a7ad5cee91d93 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index e19e6e1ee366c..058af61f8d3fc 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-07-30 +date: 2024-08-01 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 008f23f09bdad..5eef877c71008 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-07-30 +date: 2024-08-01 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 1e402b7a54b25..9c76278af9872 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-07-30 +date: 2024-08-01 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 8be0c96fffd0f..6f16696c117a2 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-07-30 +date: 2024-08-01 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 3ee290e61263a..fee771529f127 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-07-30 +date: 2024-08-01 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 8963dbad26426..2af0ae0037ad5 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-07-30 +date: 2024-08-01 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 1930f04ab2a50..500b77aaf7b1d 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-07-30 +date: 2024-08-01 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 ffeefe64ce0b8..0a6cfd0d1b6d0 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-07-30 +date: 2024-08-01 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 604444088b9d3..b117d7c0ae109 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 6a12e788897fa..fdc95a7810371 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-07-30 +date: 2024-08-01 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 dd9efb75883db..28329127d58a1 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-07-30 +date: 2024-08-01 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 b042649fa2dce..9b6b929396f09 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-07-30 +date: 2024-08-01 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 9df0d98a6c411..120fd26fba15f 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-07-30 +date: 2024-08-01 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 1105b29cb82e1..8c22e571f8960 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-07-30 +date: 2024-08-01 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 c0d9290d06f0a..48f000f70e0aa 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-07-30 +date: 2024-08-01 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 70a2cfd8354d5..bf022848eecf6 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-07-30 +date: 2024-08-01 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 9630f729db647..7ee1d0ec68e11 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-07-30 +date: 2024-08-01 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 558eae3413128..e9fe834b133a9 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-07-30 +date: 2024-08-01 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 4d3b80ed95b2b..81073b2927b1d 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-07-30 +date: 2024-08-01 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 d9663ee88241e..8ccbaf0361813 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-07-30 +date: 2024-08-01 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 7c5a315a5caba..6bb092a12ae7c 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-07-30 +date: 2024-08-01 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 eb5cf4621a174..a0fe0bce4e42f 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-07-30 +date: 2024-08-01 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 7517f39dbe1b8..6349f2b4b11b5 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 83b0a3e264edd..81e983e6b57d7 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 7f022b5306583..8b8c906355978 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-07-30 +date: 2024-08-01 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 6b004d10d91c8..df533b85c5b19 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-07-30 +date: 2024-08-01 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 c2f9b7aefce10..69544abab6e7c 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-07-30 +date: 2024-08-01 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 19e326b5fa82f..d678e2306b550 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-07-30 +date: 2024-08-01 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 f9faa1b5ea5d2..1bebed52b87d9 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-07-30 +date: 2024-08-01 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 83bd175ccef15..722a951d8351b 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-07-30 +date: 2024-08-01 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 653ff2dcec448..5c89af7b238b8 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-07-30 +date: 2024-08-01 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 1f75fbf7b5c59..5f8093e3e31ba 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-07-30 +date: 2024-08-01 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 ac518aa359a0c..df6e0aea3a374 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-07-30 +date: 2024-08-01 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 db99772ea5042..996484c227a74 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-07-30 +date: 2024-08-01 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 6978e9d4038b9..23a059e33a60c 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-07-30 +date: 2024-08-01 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 04ec969a2bbdb..607c0bd176ff9 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-07-30 +date: 2024-08-01 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 53aaa00b4991d..f1c65abe9ff40 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-07-30 +date: 2024-08-01 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 24540524aa12d..20fdce1b2e1a8 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-07-30 +date: 2024-08-01 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 8d988d8d9434d..17bbbd7cae18a 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-07-30 +date: 2024-08-01 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 a4e91f8013304..026c09dde0a6f 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-07-30 +date: 2024-08-01 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 ea2dff3601ce4..d3bc2976b10d3 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-07-30 +date: 2024-08-01 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 2a47150858bbb..6c88df056d2b4 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-07-30 +date: 2024-08-01 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 709dec8877b2e..9f2ce087132c6 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-07-30 +date: 2024-08-01 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 af6e32e715a75..2a5376b5c5b2f 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-07-30 +date: 2024-08-01 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 fc6d5ba82c9cc..d257b36dc6693 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-07-30 +date: 2024-08-01 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 e77b1a6748972..dfdba1b2c7abd 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-07-30 +date: 2024-08-01 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 5ee8875754489..e4f4b3f0bb641 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-07-30 +date: 2024-08-01 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 2b548cdf44f34..523c6314e8985 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-07-30 +date: 2024-08-01 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 a62a0e3f64501..0a4b4035c90e7 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-07-30 +date: 2024-08-01 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 5d147d9d3ad8f..b5ec40633c53c 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-07-30 +date: 2024-08-01 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 7fc33afe4095c..a6ec49f1663a6 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-07-30 +date: 2024-08-01 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 82d3a565bd168..9c3ff4a420a93 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-07-30 +date: 2024-08-01 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 6dcfd4499e31c..25dcd6e69af3f 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-07-30 +date: 2024-08-01 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 3abf181f237ef..e805136792b6e 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-07-30 +date: 2024-08-01 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 e9cb82843b23c..ce0956dadffe1 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-07-30 +date: 2024-08-01 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 97ecc57de6391..c16dd9bcd8a97 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-07-30 +date: 2024-08-01 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 29798ee008fb5..62929995d0a8a 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-07-30 +date: 2024-08-01 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 60e8754d39ecb..5a3d12fbb9331 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-07-30 +date: 2024-08-01 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 e05836c8c3b64..88940cdfe3ee2 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-07-30 +date: 2024-08-01 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 e7cce9c44328e..d930fd497fe1d 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-07-30 +date: 2024-08-01 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 f5d3a81db63d9..a7eae9f5c3ed2 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-07-30 +date: 2024-08-01 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 544caa1ac2a42..42305ec6a12bb 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-07-30 +date: 2024-08-01 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 f7129123aea6b..aea15e89b1a57 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-07-30 +date: 2024-08-01 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 dfa6d2c9e8cad..dfd8806776503 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-07-30 +date: 2024-08-01 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 3a707a57231b8..a6a6bc3e93c9e 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-07-30 +date: 2024-08-01 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 9dbd8873f6fe6..33a4372366999 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-07-30 +date: 2024-08-01 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 428effe6c8bdc..73d984f3eb530 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-07-30 +date: 2024-08-01 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 f9def6521b381..570e4dc255e76 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-07-30 +date: 2024-08-01 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 0cbd50bc3e8dc..cc41790677454 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-07-30 +date: 2024-08-01 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 53acea9cd62fb..4eceae03d4422 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 5e1f1c3ca54ee..99c2cbb42a832 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 3ccbba58bb577..caea418957b06 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-07-30 +date: 2024-08-01 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 5828618bacedb..2a134eb795e31 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-07-30 +date: 2024-08-01 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 3f6df94acb634..2ff937e13c85b 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-07-30 +date: 2024-08-01 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 e85b7a5b7e7b9..3dd24aa4ecdea 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-07-30 +date: 2024-08-01 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 bfceebd71cd6e..f1940c6d7b00d 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 2cbe52404b1c4..0beadefdcc823 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 912698c6e2a89..48d32907a7633 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-07-30 +date: 2024-08-01 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 52fef4a97db09..f1a0102f45b01 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-07-30 +date: 2024-08-01 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 df1d222578991..ea7ee1c3b93cd 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-07-30 +date: 2024-08-01 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 f791dee0730c3..f49a4b32c4662 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-07-30 +date: 2024-08-01 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 196c7e21c21ba..1a975da9dab0f 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-07-30 +date: 2024-08-01 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 7c61823e1c52a..56cf5325ebd28 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-07-30 +date: 2024-08-01 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 12b9855699e9a..5d2b0d03c0a27 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-07-30 +date: 2024-08-01 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 2dcdebe389a9d..52b7d71162298 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-07-30 +date: 2024-08-01 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 4d63c69bfa1d2..5e8f1a20a3e29 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-07-30 +date: 2024-08-01 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 7c856eb1a2793..5e06938618aed 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-07-30 +date: 2024-08-01 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 16ed405fa368a..6fd82772eb35a 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-07-30 +date: 2024-08-01 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 df9dc80125a72..c4f8689fc5744 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-07-30 +date: 2024-08-01 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 ba5f8f7842447..0845e505fc039 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-07-30 +date: 2024-08-01 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 e26a7cbc47bf2..05097a5a53c5d 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-07-30 +date: 2024-08-01 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 223034a5195c7..750cf483e1f9b 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-07-30 +date: 2024-08-01 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 ada4bfa43df5e..040623daed125 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-07-30 +date: 2024-08-01 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 2f92a3226c7e2..3698f4ae6522a 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-07-30 +date: 2024-08-01 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 7af8f769b5466..9586b19ef3c54 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-07-30 +date: 2024-08-01 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 df10f9e02b7bc..f0ea72c2b5e73 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 17c968aed37bf..1a8d360c1dca9 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 01e02afd1114b..e90cceb7197b1 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-07-30 +date: 2024-08-01 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 029c56fd8d890..355d2c4f60152 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-07-30 +date: 2024-08-01 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 29f7f42ad3981..8475c36801278 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-07-30 +date: 2024-08-01 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 f20b6e95f7fb1..5b15749fa5539 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-07-30 +date: 2024-08-01 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 8c91569219454..3e8f6d6d31ede 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-07-30 +date: 2024-08-01 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 981ae45ad361c..ce3695c5e3d8a 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-07-30 +date: 2024-08-01 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 df100e05bdd3d..59512fbd07447 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-07-30 +date: 2024-08-01 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 c09457b93e3b7..c80379deb7e04 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-07-30 +date: 2024-08-01 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 963b3f8f9865a..3e9d8fb8d4767 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-07-30 +date: 2024-08-01 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.mdx b/api_docs/kbn_zod.mdx index dc179771d387a..f7328c48bfe0d 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 46ae414e211a8..a7d420fe20770 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-07-30 +date: 2024-08-01 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 e032bfb124e03..ad350fb11a12b 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index bf2b3e9b7f381..66fcd75c06a70 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-07-30 +date: 2024-08-01 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 d271cfebc4cab..0be9836d1d030 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-07-30 +date: 2024-08-01 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 0dec6b0a82c3d..42a3031dd30c6 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-07-30 +date: 2024-08-01 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 319bd9be21e71..4589ba956f902 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-07-30 +date: 2024-08-01 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 bf8ca0354fb1b..be5eb71ecb725 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-07-30 +date: 2024-08-01 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 1b60d28520865..8322c96ca7c6e 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-07-30 +date: 2024-08-01 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 6009953027212..7e39844d48256 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-07-30 +date: 2024-08-01 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 49be9114bf811..2e6f4a9a90980 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-07-30 +date: 2024-08-01 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 ae541a6fbcb96..86d07e214acef 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-07-30 +date: 2024-08-01 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 11df4d9c38a52..0501691dfdcd2 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-07-30 +date: 2024-08-01 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 83d5b85c9063d..9cf7b160dfb93 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 12f1c4c7b16b1..b33738e320389 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-07-30 +date: 2024-08-01 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 9e9b18bac3a3f..8b042db3c541c 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-07-30 +date: 2024-08-01 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 da1c81ab61341..44ec688a4d564 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-07-30 +date: 2024-08-01 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 96dd2976d7204..d268e3ea1510a 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-07-30 +date: 2024-08-01 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 dbf18c497b0c6..77b2e3225986f 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-07-30 +date: 2024-08-01 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 df24f285b5a22..abb92576992d9 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-07-30 +date: 2024-08-01 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 cec95e030c665..087715c8d5666 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-07-30 +date: 2024-08-01 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 2e99b392b8b34..dbc516f4d7305 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-07-30 +date: 2024-08-01 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 0166d64c9a47c..b27ae4b42ddc0 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-07-30 +date: 2024-08-01 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 b6ed7754b9d86..25d3aca4e4958 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-07-30 +date: 2024-08-01 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 24dbf3bcb4677..6fc1783772d64 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-07-30 +date: 2024-08-01 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 566a15fce7c51..10b589b7663c4 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-07-30 +date: 2024-08-01 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 f651069e6cf82..129bdcf64cef0 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 976a88811fc1d..560494a1d76ff 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-07-30 +date: 2024-08-01 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 dcc4da6a347a7..32f2b29f02f74 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-07-30 +date: 2024-08-01 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 824763fb1ac65..62b78a0852563 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-07-30 +date: 2024-08-01 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 e59a660053d25..72f60f083cae2 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-07-30 +date: 2024-08-01 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 36a68ee7510e6..a71eac4fbb9c9 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-07-30 +date: 2024-08-01 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 c19c72576152f..689ecd0e3f4e6 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-07-30 +date: 2024-08-01 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 9c776ec76ea9a..48a4b5df508f1 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-07-30 +date: 2024-08-01 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 e176a07a8b058..2082ca6d4235f 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-07-30 +date: 2024-08-01 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 d6328d5763c57..cc36fdf0e1800 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-07-30 +date: 2024-08-01 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 0681912262c19..e7ed5e8f1f393 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 827 | 703 | 43 | +| 826 | 702 | 44 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 51626 | 241 | 38440 | 1896 | +| 51479 | 241 | 38448 | 1894 | ## Plugin Directory @@ -74,7 +74,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Entity manager plugin for entity assets (inventory, topology, etc) | 14 | 0 | 14 | 1 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Entity manager plugin for entity assets (inventory, topology, etc) | 16 | 0 | 16 | 1 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 99 | 3 | 97 | 3 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 10 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 2 | 0 | 2 | 0 | @@ -196,7 +196,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 25 | 0 | 25 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 10 | 0 | 10 | 0 | | synthetics | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 107 | 0 | 63 | 7 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 105 | 0 | 62 | 5 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 45 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 31 | 0 | 26 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 1 | 0 | @@ -205,7 +205,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 228 | 1 | 184 | 18 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 588 | 1 | 562 | 51 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 590 | 1 | 564 | 51 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 156 | 0 | 110 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 212 | 0 | 145 | 11 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 15 | 0 | 10 | 3 | @@ -283,10 +283,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 33 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 30 | 0 | 30 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 195 | 1 | 128 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 101 | 0 | 0 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 100 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 100 | 0 | 0 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 99 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 0 | | | [@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) | - | 103 | 0 | 27 | 0 | @@ -486,13 +486,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 78 | 0 | 78 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 41 | 0 | 27 | 6 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 152 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 33 | 0 | 24 | 1 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 13 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 156 | 0 | 130 | 9 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 354 | 0 | 328 | 0 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 23 | 0 | 23 | 0 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 26 | 0 | 26 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 54 | 0 | 39 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 6 | 0 | @@ -500,7 +499,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 27 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 135 | 1 | 120 | 12 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 63 | 0 | 59 | 0 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 65 | 0 | 61 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 194 | 0 | 183 | 10 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 97fc690379b25..e573d3a289c6b 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-07-30 +date: 2024-08-01 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 1a8ba9ec02171..9c46ec7318a27 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-07-30 +date: 2024-08-01 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 b95b5247c24f0..ad050177e4060 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-07-30 +date: 2024-08-01 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 5a8476193d166..ea0336757577b 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-07-30 +date: 2024-08-01 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 979deacf0520f..2c654b3342a8a 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-07-30 +date: 2024-08-01 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 b058ccc2a23eb..3e758f52c440f 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-07-30 +date: 2024-08-01 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 f3599c69260c1..296676d2f4694 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-07-30 +date: 2024-08-01 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 8fb757e92bc5a..3390c6a7db0e6 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-07-30 +date: 2024-08-01 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 71f7f57324660..39c8d8e93b2ee 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-07-30 +date: 2024-08-01 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 1146e3708a376..0fd60f971f1fc 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-07-30 +date: 2024-08-01 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 e4bbc5efff7e8..2525b57694e08 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-07-30 +date: 2024-08-01 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 8d24ceb9a7b56..0044fb7f939d1 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-07-30 +date: 2024-08-01 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 b87cd667bbb2e..b2ac368c8277b 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-07-30 +date: 2024-08-01 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 23a2cda9e9308..783f60994d125 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-07-30 +date: 2024-08-01 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 96ea23d04246f..b623228e1fa2f 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-07-30 +date: 2024-08-01 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 1f00aafef3218..c89972a58b842 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-07-30 +date: 2024-08-01 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 2890604a53c1b..bc1f29a7afa3b 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-07-30 +date: 2024-08-01 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 17749255d18af..8504887cdbc36 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index d02b098688e89..90527b6af2bbd 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 38b90635e2749..4515a2e78f514 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 45566ef39733e..01188384b25cf 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-07-30 +date: 2024-08-01 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 0325c5269b087..d7ec6fa6ea83b 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 5abd8e976d886..7e1c6760e405a 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -5950,10 +5950,6 @@ "plugin": "entityManager", "path": "x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/disable.ts" }, - { - "plugin": "observabilityOnboarding", - "path": "x-pack/plugins/observability_solution/observability_onboarding/server/routes/flow/route.ts" - }, { "plugin": "synthetics", "path": "x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.ts" diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 01a9cc0f7a42a..f5896c16d8ce1 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 0ea62472d498e..4f45187b433b2 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1932,7 +1932,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3039,7 +3039,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3215,7 +3215,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3281,7 +3281,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: false; readonly responseActionsSentinelOneProcessesEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly responseActionScanEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly securitySolutionNotesEnabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly assistantBedrockChat: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly jamfDataInAnalyzerEnabled: false; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: false; }" + "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: false; readonly responseActionsSentinelOneProcessesEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly responseActionScanEnabled: false; readonly alertsPageChartsEnabled: true; readonly securitySolutionNotesEnabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly assistantBedrockChat: true; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly jamfDataInAnalyzerEnabled: false; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: false; readonly dataIngestionHubEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index e3914201d35df..bc47994fc9efa 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-07-30 +date: 2024-08-01 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 0f611913ee6d5..52ebb64b02aeb 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-07-30 +date: 2024-08-01 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 b8c7ee0f95406..f4b49f9f9d91c 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-07-30 +date: 2024-08-01 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 c85867210dcfc..126f38401b347 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-07-30 +date: 2024-08-01 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 f28eff99a2d41..b73d5c1a84008 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-07-30 +date: 2024-08-01 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 80ceedb0673dd..0f6d7290ce003 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-07-30 +date: 2024-08-01 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 e8cc2c57f6770..4fbd090371881 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 509345f6173ad..6ab160a03e05d 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 8539db01297df..ec4c3dcb85ab2 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index d33b0c275cc1d..876fcbea23741 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-07-30 +date: 2024-08-01 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 b2e5b6a6177e6..2c1537cfa54ae 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-07-30 +date: 2024-08-01 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 8f2f189ff21d8..4e3c66e0a8e81 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-07-30 +date: 2024-08-01 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 ac8655d250c9d..a27dbaf7a9f76 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.devdocs.json b/api_docs/task_manager.devdocs.json index 072749656b481..f14b739a6a8c0 100644 --- a/api_docs/task_manager.devdocs.json +++ b/api_docs/task_manager.devdocs.json @@ -230,7 +230,7 @@ "label": "start", "description": [], "signature": [ - "({ savedObjects, elasticsearch, executionContext, docLinks }: ", + "({ savedObjects, elasticsearch, executionContext, docLinks, }: ", { "pluginId": "@kbn/core-lifecycle-server", "scope": "server", @@ -238,8 +238,6 @@ "section": "def-server.CoreStart", "text": "CoreStart" }, - ", { cloud, serverless }: ", - "TaskManagerPluginStart", ") => ", { "pluginId": "taskManager", @@ -258,7 +256,7 @@ "id": "def-server.TaskManagerPlugin.start.$1", "type": "Object", "tags": [], - "label": "{ savedObjects, elasticsearch, executionContext, docLinks }", + "label": "{\n savedObjects,\n elasticsearch,\n executionContext,\n docLinks,\n }", "description": [], "signature": [ { @@ -273,21 +271,6 @@ "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "taskManager", - "id": "def-server.TaskManagerPlugin.start.$2", - "type": "Object", - "tags": [], - "label": "{ cloud, serverless }", - "description": [], - "signature": [ - "TaskManagerPluginStart" - ], - "path": "x-pack/plugins/task_manager/server/plugin.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true } ], "returnComment": [] @@ -1454,23 +1437,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "taskManager", - "id": "def-server.TaskRegisterDefinition.cost", - "type": "CompoundType", - "tags": [], - "label": "cost", - "description": [ - "\nAn optional definition of the cost associated with running the task." - ], - "signature": [ - "TaskCost", - " | undefined" - ], - "path": "x-pack/plugins/task_manager/server/task_type_dictionary.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "taskManager", "id": "def-server.TaskRegisterDefinition.description", diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 91245533c693f..b748756648d35 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 107 | 0 | 63 | 7 | +| 105 | 0 | 62 | 5 | ## Server diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 8b3c231e5b674..c04570e6d31c2 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-07-30 +date: 2024-08-01 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 097c38a2444c2..9ff4ca1385337 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-07-30 +date: 2024-08-01 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 ffbb4ac4b8cb6..58430e970b49f 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-07-30 +date: 2024-08-01 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 f414f32fcbe67..a1903aff59002 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 7e69fe696ba5f..8fff89ee6dec8 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.devdocs.json b/api_docs/timelines.devdocs.json index 94d368b31abaa..94b9066784f4e 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -3636,18 +3636,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx" @@ -3704,14 +3692,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/table/field_value_cell.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/table/field_value_cell.tsx" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/components/event_details/table/use_action_cell_data_provider.ts" @@ -3760,6 +3740,26 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.ts" @@ -4055,11 +4055,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" }, { "plugin": "securitySolution", @@ -4067,31 +4067,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", @@ -4161,6 +4141,18 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/flyout/document_details/shared/context.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/utils.ts" diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 99eb93cb43518..f2ca6609d2bcc 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-07-30 +date: 2024-08-01 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 8815f25984905..95df150988cc9 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index 559bde99779b9..303af21b7d997 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -9361,7 +9361,7 @@ "label": "buildAggregation", "description": [], "signature": [ - "({ timeSeries, aggType, aggField, termField, termSize, sourceFieldsParams, condition, topHitsSize, }: ", + "({ timeSeries, aggType, aggField, termField, termSize, sourceFieldsParams, condition, topHitsSize, loggerCb, }: ", { "pluginId": "triggersActionsUi", "scope": "common", @@ -9382,7 +9382,7 @@ "id": "def-common.buildAggregation.$1", "type": "Object", "tags": [], - "label": "{\n timeSeries,\n aggType,\n aggField,\n termField,\n termSize,\n sourceFieldsParams,\n condition,\n topHitsSize,\n}", + "label": "{\n timeSeries,\n aggType,\n aggField,\n termField,\n termSize,\n sourceFieldsParams,\n condition,\n topHitsSize,\n loggerCb,\n}", "description": [], "signature": [ { @@ -9875,6 +9875,38 @@ "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-common.BuildAggregationOpts.loggerCb", + "type": "Function", + "tags": [], + "label": "loggerCb", + "description": [], + "signature": [ + "((message: string) => void) | undefined" + ], + "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "triggersActionsUi", + "id": "def-common.BuildAggregationOpts.loggerCb.$1", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 0ccfa2dbf7c76..3c73082ac97dd 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 588 | 1 | 562 | 51 | +| 590 | 1 | 564 | 51 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 335795512ab6f..ac46711599f0e 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-07-30 +date: 2024-08-01 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 03be17bd18078..ff9a063159749 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-07-30 +date: 2024-08-01 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 fc8b953e88b02..ee16441e66b45 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-07-30 +date: 2024-08-01 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 19465b1483862..600ae991b6ba8 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.devdocs.json b/api_docs/unified_search.devdocs.json index 90db05c3662ca..d961a5ce4e80a 100644 --- a/api_docs/unified_search.devdocs.json +++ b/api_docs/unified_search.devdocs.json @@ -620,7 +620,7 @@ }, "[] | undefined; iconType?: ", "IconType", - " | undefined; dataTestSubj?: string | undefined; showSaveQuery?: boolean | undefined; customSubmitButton?: React.ReactNode; dataViewPickerOverride?: React.ReactNode; screenTitle?: string | undefined; showQueryMenu?: boolean | undefined; showQueryInput?: boolean | undefined; showFilterBar?: boolean | undefined; showDatePicker?: boolean | undefined; showAutoRefreshOnly?: boolean | undefined; additionalQueryBarMenuItems?: ", + " | undefined; showQueryInput?: boolean | undefined; dataTestSubj?: string | undefined; showSaveQuery?: boolean | undefined; customSubmitButton?: React.ReactNode; dataViewPickerOverride?: React.ReactNode; screenTitle?: string | undefined; showQueryMenu?: boolean | undefined; showFilterBar?: boolean | undefined; showDatePicker?: boolean | undefined; showAutoRefreshOnly?: boolean | undefined; additionalQueryBarMenuItems?: ", "AdditionalQueryBarMenuItems", " | undefined; filtersForSuggestions?: ", { @@ -1592,23 +1592,11 @@ "description": [], "signature": [ "{ optIn: (optInConfig: ", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.OptInConfig", - "text": "OptInConfig" - }, + "OptInConfig", ") => void; reportEvent: (eventType: string, eventData: EventTypeData) => void; readonly telemetryCounter$: ", "Observable", "<", - { - "pluginId": "@kbn/ebt", - "scope": "common", - "docId": "kibKbnEbtPluginApi", - "section": "def-common.TelemetryCounter", - "text": "TelemetryCounter" - }, + "TelemetryCounter", ">; }" ], "path": "src/plugins/unified_search/public/types.ts", diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 731fa8e5ae6c7..d287c7819a613 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-07-30 +date: 2024-08-01 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 59e5f8c9232ad..f00034330ebce 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-07-30 +date: 2024-08-01 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 45f5dade79385..85cc363c0114e 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-07-30 +date: 2024-08-01 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 bd3d3357f54aa..ae54e4e5649a7 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.devdocs.json b/api_docs/usage_collection.devdocs.json index af090a71c02da..b1395ec0602f2 100644 --- a/api_docs/usage_collection.devdocs.json +++ b/api_docs/usage_collection.devdocs.json @@ -1882,7 +1882,7 @@ "signature": [ "\"boolean\" | \"keyword\" | \"text\" | \"date\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"double\"" ], - "path": "packages/analytics/ebt/client/src/schema/types.ts", + "path": "node_modules/@elastic/ebt/client/src/schema/types.d.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 3a6838a2e6793..ee976cf2cdd2a 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-07-30 +date: 2024-08-01 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 e4248424bd329..1220278c061be 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-07-30 +date: 2024-08-01 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 73d7e6f5d5559..a4e674961a40b 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-07-30 +date: 2024-08-01 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 bc4c6e9570cfb..f31f7cbfde210 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-07-30 +date: 2024-08-01 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 b31dac9013562..9e76049923243 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-07-30 +date: 2024-08-01 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 6044e8c7ed526..e114470372ab6 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-07-30 +date: 2024-08-01 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 25111533c2f61..b2596325d3c2b 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-07-30 +date: 2024-08-01 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 c20d6711e57f0..4b49c8a725594 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-07-30 +date: 2024-08-01 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 48597057490f0..5e9451ad9e730 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-07-30 +date: 2024-08-01 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 e6f85762d6634..26247a2c08163 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-07-30 +date: 2024-08-01 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 35b6b00c53f8d..395445ad212c8 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-07-30 +date: 2024-08-01 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 79cdc80bf117a..d117a12c22196 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-07-30 +date: 2024-08-01 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 3bf24b520bdb6..eb96e26e0b104 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-07-30 +date: 2024-08-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/user/dashboard/dashboard.asciidoc b/docs/user/dashboard/dashboard.asciidoc index b83e8a9dc29aa..36dce0e2586e5 100644 --- a/docs/user/dashboard/dashboard.asciidoc +++ b/docs/user/dashboard/dashboard.asciidoc @@ -78,8 +78,11 @@ When you create a dashboard, you are automatically in edit mode and can make cha * To open an existing dashboard, click the dashboard *Title* you want to open. + +TIP: When looking for a specific dashboard, you can filter them by tag or by creator, or search the list based on their name and description. Note that the creator information is only available for dashboards created on or after version 8.14. ++ When you open an existing dashboard, you are in view mode. To make changes to the dashboard, click *Edit* in the toolbar. + [float] [[create-panels-with-lens]] === Create and add panels @@ -450,4 +453,6 @@ include::create-panels-with-editors.asciidoc[] include::make-dashboards-interactive.asciidoc[] +include::find-dashboards.asciidoc[] + include::dashboard-troubleshooting.asciidoc[] diff --git a/docs/user/dashboard/find-dashboards.asciidoc b/docs/user/dashboard/find-dashboards.asciidoc new file mode 100644 index 0000000000000..f1cb400944eca --- /dev/null +++ b/docs/user/dashboard/find-dashboards.asciidoc @@ -0,0 +1,29 @@ +[[find-dashboards]] +== Search and filter dashboards + +When looking for specific dashboards to open or share, several actions are available to you to help you find them quicker. + +**Search by name, description, or tag** + +On your list of **Dashboards**, use the search field to look for specific terms. These terms will be highlighted in real time in your dashboard list to help you locate what's relevant to you. + +**Filter by tag** + +When creating or editing dashboards, you can assign them tags that allow you to retrieve them faster in the future. + +On your dashboard list, you have an option that lets you filter dashboards in or out based on their tags. + +**Filter by creator** + +The user who created or imported a dashboard is identified as the dashboard's **creator**. This information is visible right from the dashboard list, and you can filter that list by creator. + +Similarly, managed dashboards created by integrations are identified as created by Elastic. + +NOTE: The creator information is only available for dashboards created on or after version 8.14. For dashboards from previous versions, the creator is empty. + +image::images/dashboard-filter-by-creator.png[Option to filter the list of dashboards by creator] + +**Sort by name or last update date** + +You can sort the dashboard list based on their name or their last update date. + diff --git a/docs/user/dashboard/images/dashboard-creator-editor.png b/docs/user/dashboard/images/dashboard-creator-editor.png new file mode 100644 index 0000000000000..ee75fee60c4b0 Binary files /dev/null and b/docs/user/dashboard/images/dashboard-creator-editor.png differ diff --git a/docs/user/dashboard/images/dashboard-filter-by-creator.png b/docs/user/dashboard/images/dashboard-filter-by-creator.png new file mode 100644 index 0000000000000..d68aa6a945511 Binary files /dev/null and b/docs/user/dashboard/images/dashboard-filter-by-creator.png differ diff --git a/docs/user/dashboard/images/legend-icon.svg b/docs/user/dashboard/images/legend-icon.svg new file mode 100644 index 0000000000000..332612054af28 --- /dev/null +++ b/docs/user/dashboard/images/legend-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/user/dashboard/images/legend-popover.png b/docs/user/dashboard/images/legend-popover.png new file mode 100644 index 0000000000000..4633ab4d8ee52 Binary files /dev/null and b/docs/user/dashboard/images/legend-popover.png differ diff --git a/docs/user/dashboard/images/statistics-in-legends.png b/docs/user/dashboard/images/statistics-in-legends.png new file mode 100644 index 0000000000000..64e8826a49884 Binary files /dev/null and b/docs/user/dashboard/images/statistics-in-legends.png differ diff --git a/docs/user/dashboard/lens.asciidoc b/docs/user/dashboard/lens.asciidoc index b3c5c4980e933..71ca1ccf51233 100644 --- a/docs/user/dashboard/lens.asciidoc +++ b/docs/user/dashboard/lens.asciidoc @@ -361,13 +361,69 @@ The following component menus are available: * *Labels* — Specifies how to display the labels for donut charts, pie charts, and treemaps. -* *Legend* — Specifies how to display the legend. For example, you can display the legend inside the visualization and truncate the legend values. +* *Legend* — Specifies how to display the legend. You can choose to display the legend inside or outside the visualization, truncate the legend values when they're too long, and <>. * *Left axis*, *Bottom axis*, and *Right axis* — Specify how you want to display the chart axes. For example, add axis labels and change the orientation and bounds. +[float] +[[customize-visualization-legend]] +===== Customize a visualization legend + +When creating or editing a visualization, you can customize the way the legend gets displayed, and the data it displays. To do that, look for the image:images/legend-icon.svg[Legend icon] icon. + +image::images/legend-popover.png[Menu with options to customize the legend of a visualization, width=40%] + +NOTE: The options available can vary based on the type of chart you're setting up. For example, showing additional statistics is only possible for time series charts. + +**Change the legend's display** + +With the **Visibility**, **Position**, and **Width** options, you can adjust the way the legend appears in or next to the visualization. + +**Truncate long labels** + +With the **Label truncation** option, you can keep your legend minimal in case of long labels that span over multiple lines. + +**Show additional statistics for time series charts** + +To make your legends as informative as possible, you can show some additional **Statistics** for charts with a timestamp on one of the axes, and add a **Series header**. + +**Bar**, **Line** and **Area** charts can show the following values: + +- **Average**: Average value considering all data points in the chart +- **Median**: Median value considering all data points in the chart +- **Minimum**: Minimum value considering all data points in the chart +- **Maximum**: Maximum value considering all data points in the chart +- **Range**: Difference between min and max values +- **Last value**: Last value considering all data points in the chart +- **Last non-null value:** Last non-null value +- **First value**: First value considering all data points in the chart +- **First non-null value**: First non-null value +- **Difference**: Difference between first and last values +- **Difference %**: % difference between first and last values +- **Sum**: Sum of al values plotted in the chart +- **Count**: number of data points plotted in the chart +- **Distinct Count**: number of data points with different values plotted in the chart +- **Variance**: Variance of all data points plotted in the chart +- **Std Deviation**: Standard deviation of all data points plotted in the chart +- **Current or last value**: The exact value of the current or last data point moused over + + +//Not part of release +//**Pie** charts can only show two static options: +//- **Value** +//- **Percentage** + +All statistics are computed based on the selected time range and the aggregated data points shown in the chart, rather than the original data coming from {es}. + +For example, if the metric plotted in the chart is `Median(system.memory)` and the time range is *last 24 hours*, when you show the **Max** statistic in the Legend, the value that shows corresponds to the `Max[Median(system.memory)]` for the last 24 hours. + +image::images/statistics-in-legends.png[Additional statistics shown in the legend of a memory consumption bar chart] + + + [float] [[explore-lens-data-in-discover]] -=== Explore the data in Discover +==== Explore the data in Discover When your visualization includes one data view, you can open and explore the visualization data in *Discover*. diff --git a/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc b/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc index ecc7b49750eed..49aaabb0a5420 100644 --- a/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc +++ b/docs/user/dashboard/tutorial-create-a-dashboard-of-lens-panels.asciidoc @@ -376,4 +376,6 @@ Now that you have a complete overview of your web server data, save the dashboar . Select *Store time with dashboard*. -. Click *Save*. +. Click *Save*. You will be identified as the **creator** of the dashboard. If you or another user edit the dashboard, you can also view the **last editor** when checking the dashboard information. + +image::images/dashboard-creator-editor.png[Information panel of a dashboard showing its creator and last editor] diff --git a/docs/user/images/array-in-metrics.png b/docs/user/images/array-in-metrics.png new file mode 100644 index 0000000000000..e7bd84a46af2d Binary files /dev/null and b/docs/user/images/array-in-metrics.png differ diff --git a/docs/user/images/create-simple-api-key.png b/docs/user/images/create-simple-api-key.png new file mode 100644 index 0000000000000..d30271401fe7b Binary files /dev/null and b/docs/user/images/create-simple-api-key.png differ diff --git a/docs/user/images/dashboard-creator-filter.png b/docs/user/images/dashboard-creator-filter.png new file mode 100644 index 0000000000000..69534b06b8bd3 Binary files /dev/null and b/docs/user/images/dashboard-creator-filter.png differ diff --git a/docs/user/images/dashboard-creator.png b/docs/user/images/dashboard-creator.png new file mode 100644 index 0000000000000..3b77ac7995b87 Binary files /dev/null and b/docs/user/images/dashboard-creator.png differ diff --git a/docs/user/images/dashboard-last-editor.png b/docs/user/images/dashboard-last-editor.png new file mode 100644 index 0000000000000..1b4062e90c273 Binary files /dev/null and b/docs/user/images/dashboard-last-editor.png differ diff --git a/docs/user/images/esql-field-statistics.png b/docs/user/images/esql-field-statistics.png new file mode 100644 index 0000000000000..0dfbfeeed67cf Binary files /dev/null and b/docs/user/images/esql-field-statistics.png differ diff --git a/docs/user/images/field-statistics-esql.png b/docs/user/images/field-statistics-esql.png new file mode 100644 index 0000000000000..f94a5dfd5b06d Binary files /dev/null and b/docs/user/images/field-statistics-esql.png differ diff --git a/docs/user/images/field-statistics-panel-in-dashboards.png b/docs/user/images/field-statistics-panel-in-dashboards.png new file mode 100644 index 0000000000000..32d6cdcf0051e Binary files /dev/null and b/docs/user/images/field-statistics-panel-in-dashboards.png differ diff --git a/docs/user/images/integrations-in-esql.png b/docs/user/images/integrations-in-esql.png new file mode 100644 index 0000000000000..1a45b223d9888 Binary files /dev/null and b/docs/user/images/integrations-in-esql.png differ diff --git a/docs/user/images/obs-log-rate-analysis-insigths.png b/docs/user/images/obs-log-rate-analysis-insigths.png new file mode 100644 index 0000000000000..d87707d1fcd84 Binary files /dev/null and b/docs/user/images/obs-log-rate-analysis-insigths.png differ diff --git a/docs/user/images/share-modal.png b/docs/user/images/share-modal.png new file mode 100644 index 0000000000000..d8bd1faf1498a Binary files /dev/null and b/docs/user/images/share-modal.png differ diff --git a/docs/user/images/statistics-in-legends.png b/docs/user/images/statistics-in-legends.png new file mode 100644 index 0000000000000..64e8826a49884 Binary files /dev/null and b/docs/user/images/statistics-in-legends.png differ diff --git a/docs/user/images/statistics-in-legends2.png b/docs/user/images/statistics-in-legends2.png new file mode 100644 index 0000000000000..8fecabb9f9425 Binary files /dev/null and b/docs/user/images/statistics-in-legends2.png differ diff --git a/docs/user/whats-new.asciidoc b/docs/user/whats-new.asciidoc index 112dc7e0b1ed8..3410a889c8f26 100644 --- a/docs/user/whats-new.asciidoc +++ b/docs/user/whats-new.asciidoc @@ -1,156 +1,198 @@ [[whats-new]] -== What's new in 8.14 +== What's new in 8.15 -Here are the highlights of what's new and improved in 8.14. +Here are the highlights of what's new and improved in 8.15. For detailed information about this release, check the <>. -Previous versions: {kibana-ref-all}/8.13/whats-new.html[8.13] | {kibana-ref-all}/8.12/whats-new.html[8.12] | {kibana-ref-all}/8.11/whats-new.html[8.11] | {kibana-ref-all}/8.10/whats-new.html[8.10] | {kibana-ref-all}/8.9/whats-new.html[8.9] | {kibana-ref-all}/8.8/whats-new.html[8.8] | {kibana-ref-all}/8.7/whats-new.html[8.7] | {kibana-ref-all}/8.6/whats-new.html[8.6] | {kibana-ref-all}/8.5/whats-new.html[8.5] | {kibana-ref-all}/8.4/whats-new.html[8.4] | {kibana-ref-all}/8.3/whats-new.html[8.3] | {kibana-ref-all}/8.2/whats-new.html[8.2] | {kibana-ref-all}/8.1/whats-new.html[8.1] | {kibana-ref-all}/8.0/whats-new.html[8.0] +Previous versions: {kibana-ref-all}/8.14/whats-new.html[8.14] | {kibana-ref-all}/8.13/whats-new.html[8.13] | {kibana-ref-all}/8.12/whats-new.html[8.12] | {kibana-ref-all}/8.11/whats-new.html[8.11] | {kibana-ref-all}/8.10/whats-new.html[8.10] | {kibana-ref-all}/8.9/whats-new.html[8.9] | {kibana-ref-all}/8.8/whats-new.html[8.8] | {kibana-ref-all}/8.7/whats-new.html[8.7] | {kibana-ref-all}/8.6/whats-new.html[8.6] | {kibana-ref-all}/8.5/whats-new.html[8.5] | {kibana-ref-all}/8.4/whats-new.html[8.4] | {kibana-ref-all}/8.3/whats-new.html[8.3] | {kibana-ref-all}/8.2/whats-new.html[8.2] | {kibana-ref-all}/8.1/whats-new.html[8.1] | {kibana-ref-all}/8.0/whats-new.html[8.0] + [discrete] -=== Discover +=== Analyst Experience [discrete] -==== Transitioning {esql} from Tech Preview to General Availability! +==== View dashboard creator and last editor -{esql} offers a streamlined way to filter, transform, and analyze data in {es}. Its intuitive design, utilizing "pipes" (|) for step-by-step data exploration, enables you to easily compose powerful queries for detailed analysis. Whether you're a developer, SRE, or Security Analyst, {esql} empowers you to uncover specific events, perform robust statistical analyses, and create compelling visualizations. As we move from tech preview to general availability, discover the enhanced capabilities of {esql} and elevate your data operations. +You can now see who created and who last updated a dashboard. -[discrete] -==== {esql} Query History +You can find the creator information right from the dashboard list. + +image::images/dashboard-creator.png[Dashboard creator column in dashboard list] + +Quickly find all dashboards created by the same user with a simple filter. -We've enhanced the {esql} editor to improve your workflow. You can now view and re-run your last 20 {esql} queries directly within Discover, {esql} charts, alerts, and maps. This feature makes it easier to manage your queries and streamline your tasks. +image::images/dashboard-creator-filter.png[Filtering dashboards by creator] -[role="screenshot"] -image::images/query-history-in-discover.png[An image of an ES|QL query history in Discover.] +Note that the creator information will be visible only for dashboards created on or after version 8.14. -[role="screenshot"] -image::images/query-history-in-dashboard.png[An image of the auto option.] +You can also see who last updated a dashboard by clicking the dashboard information icon from the dashboard list. The creator is also visible next to it. This information is immutable and cannot be changed. + +image::images/dashboard-last-editor.png[Dashboard details panel with the name of the last editor] [discrete] -==== Document comparison mode in Discover & {esql} +==== Field statistics in Dashboards + +It's now easier than ever to include your field statistics view from **Discover** into **Dashboards**. While running investigations, it is very common that you need to see some field information, such as unique values and their distribution, to make sense of the data. Select the fields that you want with your ES|QL query and get the document count, values, and distribution in your dashboard so you don't have to navigate back and forth to **Discover** to see this information. -You can now select and compare documents or fields. This functionality streamlines analysis and troubleshooting tasks by allowing you to perform detailed comparisons, such as diffing SIP messages of a certain ID across multiple documents in {es}. +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt9bc52ff7851acc52/669a4f6a490fbc64fa22f279/field-statistics.gif[Showing field statistics panel in Dashboards] [discrete] -==== Storing {esql} visualizations in saved searches +==== Statistics in legends + +Accelerate time to insights by summarizing the values of your charts using average, minimum, maximum, median, and variance, among many others. You can add these statistics for **Lens** and ES|QL visualizations. It is important to note that these statistics are computed using the data points from the chart considering the aggregation used and not the raw data. In the following example, the chart shows the median memory per host, so the Max = 15.3KB for the first series (artifacts.elastic.co) is the maximum value of the median memory per host. + +image::images/statistics-in-legends.png[Statistics in legends] -Changes to {esql} charts in Discover can now be saved along with {esql} query syntax, allowing you to share and manage your Discover views with ease. +You can find the option to select statistics for your legends along with an explanation for each calculation when editing your visualization, as shown in the following image. -[role="screenshot"] -image::images/esql-viz-saved-search.png[An image of {esql} visualization in saved search.] +image::images/statistics-in-legends2.png[Select statistics in legends] [discrete] -==== {esql} field statistics in Unified Field List +==== Array of values for Metrics -Seeing data statistics while crafting queries can be useful to understand the data batter. To enhance this experience, we've added field stats to the sidebar field popover in {esql} mode, similar to what's available in Discover data view mode. +The new **Metrics** now supports fields that show an array of values. -[role="screenshot"] -image::images/esql-field-stats.png[An image of the new field stats sidebar popover.] +image::images/array-in-metrics.png[A metric showing an array of values, width=35%] [discrete] -==== Custom data view field descriptions +==== Push flyout for Discover document viewer -We've implemented a much-requested feature that allows you to add custom descriptions to data view fields. This enhancement is going to make a significant difference in how you manage and understand your data in Kibana. You'll see these descriptions in the Unified Field List popover in Discover and Lens, enhancing your user experience. +You can now seamlessly view document details and the main table simultaneously in **Discover** with the new _push_ flyout. You can adjust the width of the flyout to suit your needs and explore your data much more easily. -[role="screenshot"] -image::images/custom-descriptions.png[An image of a custom data view field description.] +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/bltb40a408acf4ab688/669a58ea9fecd85219d58ed2/discover-push-flyout.gif[Resizable push flyout in Discover] [discrete] -=== Dashboard +==== Integrations support in the ES|QL editor when using FROM command. + +We're excited to announce enhanced support for integrations in the ES|QL editor with the *FROM* command. Previously, you could only access indices, but now you can also view a list of installed integrations directly within the editor. This improvement streamlines your workflow, making it easier to manage and utilize various integrations while working with your data. + +image::images/integrations-in-esql.png[Accessing an integration from ES|QL] [discrete] -==== Links panel Generally Available +==== Field statistics in ES|QL -You can now easily navigate from one dashboard to another using the links panel. Better organize your dashboards and make them more performant by chunking them in multiple dashboards with fewer visualizations and linking them together. You can carry over your filters, query and time range when navigating to other related dashboards. Display your links horizontally or vertically as it better suits your dashboard layout. You can also use the links panel to include external links in your dashboards. For example, to your wiki page or other applications. Decide whether you want to open the links in the same browser tab or in a new one. +Field statistics are now available in ES|QL. This feature is designed to provide comprehensive insights for each data field. With this enhancement, you can access detailed statistics such as distributions, averages, and other key metrics, helping you quickly understand your data. This makes data exploration and quality assessment more efficient, providing deeper insights and streamlining the analysis of field-level data in ES|QL. -[role="screenshot"] -image::images/links-panel.gif[A gif of the links panel in action.] +image::images/field-statistics-esql.png[Field statistics in ES|QL] [discrete] -==== Controls apply button +==== Filter UX improvements in ES|QL + +We're thrilled to unveil a complete overhaul of filtering in the ES|QL UX. Now, you can seamlessly filter data by browsing a time series chart, allowing for quick and intuitive time-based filtering. Interactive chart filtering lets you refine your data directly by clicking on any chart, while creating WHERE clause filters from the Discover table or sidebar has never been easier. These enhancements streamline data exploration and analysis, making your ES|QL experience more efficient and user-friendly than ever. + +*Filter by clicking a chart:* + +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt965a5190f246f7c8/669a7d41e5f7c84793b031cb/filter-by-clicking-chart.gif[Filter by clicking a chart] + +*Filter by browsing a time series chart:* + +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blta20c9a93dded707c/669a7d40843f93a02fe51013/filter-by-brushing-time-series.gif[Filter by browsing a time series chart] + +*Create WHERE clause filters from Discover table or sidebar:* -Controls are a popular way for users to filter their dashboards. Most of the time, users need to filter several of these controls to get the results they are looking for. In order to optimize performance and minimize the number of queries sent to get the data, we added the option to add a button so the controls selection will not be applied until the user clicks on it. That allows users to filter by multiple fields before sending any new requests to fetch the dashboard data. +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt50ac35ab3af29ff8/669a7d4006a6fafe4c7cb39d/create-where-clause-filters-from-sidebar.gif[Create WHERE clause filters from Discover table or sidebar] -[role="screenshot"] -image::images/controls-apply-button.png[An image of the new controls apply button in the UI.] +[discrete] +=== Alerting, cases, and connectors -This option is off by default and dashboard authors can decide to enable this button by switching off “Apply selections automatically” from the Controls settings. +[discrete] +==== Case templates -[role="screenshot"] -image::images/control-settings.png[An image of the control settings in the UI.] +{kib} cases offer a new powerful capability to enhance the efficiency of your analyst teams with <>. +You can manage multiple templates, each of which can be used to auto-populate values in a case with pre-defined knowledge. +This streamlines the investigative process and significantly reduces time to resolution. [discrete] -==== Gauge chart +==== Case custom fields are GA -Users can now easily build beautiful and fully functional gauge charts from Lens. The revamped gauges will adapt to the field selected suggesting automatic minimum, maximum and goal values. The gauge charts in Lens will allow users to migrate from TSVB more easily. Users can select five different types of gauge charts: semicircular, circular, arc, vertical or horizontal. +In 8.11, <> were added to cases and they are now moving from technical preview to general availability. +You can set custom field values in your templates to enhance consistency across cases. + +[discrete] +==== {sn} additional fields -[role="screenshot"] -image::images/gauge-chart.png[An image of the new gauge chats.] +You can now create enriched {sn} tickets based on detected alerts with a more comprehensive structure that matches the {sn} ticket scheme. +A new JSON field is now available as part of the {sn} action, which enables you to send any field from {kib} alerts to {sn} tickets. [discrete] -==== Region map goes GA +==== {webhook-cm} SSL auth support -Users don’t need to navigate the complexity of the Maps app (meant to be used by more advanced geo users) to build a simple map. They can easily do it now from the Lens editor. +It's common for organizations to integrate with third parties using secured authentication. +Currently, most of the available case connectors use basic authentication (user and passwords or tokens), which might not be sufficient to meet organization security policies. +With this release, the <> now supports client certification, which enables you to leverage the connector for secured integration with third parties. -[role="screenshot"] -image::images/region-map.png[An image of the region map.] +The {webhook-cm} connector also moves from technical preview to general availability in this release. [discrete] === Machine Learning [discrete] -==== Cohere reranking +==== Improved UX for Log Pattern Analysis in Discover + +Analyze large volumes of logs efficiently, in very short times with Log Pattern Analysis in **Discover**. In 8.15, we redesigned the Log Pattern Analysis user flow in **Discover** to make it easier to use. Discover log patterns with one click for the message field (and other applicable text fields) and easily filter in and out logs to drastically reduce MTTR. + +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt7e63d7e764ab183e/669a807bd316c7015db35458/ml-log-pattern-analysis.gif[New log pattern analysis interface] + +[discrete] +==== ES|QL support for field statistics in Discover -In 8.14, we have further enhanced Elastic’s inference API by adding support for Cohere’s foundation link:https://cohere.com/blog/rerank-3[Rerank 3 model] rerank-english-v.3.0. This is a natural next step following support for Cohere’s embeddings in 8.13. Elastic is the only vector database that supports Cohere Rerank 3. +The Field statistics functionality now supports ES|QL, Elastic's primary query language. -Reranking adds semantic precision on your search results, bumping the most relevant ones to the top of the list. Reranking is two-stage (or multi-stage) by nature and this is very powerful as it gives you flexibility, depending on your use case: You can easily combine it as an additional step without making changes to your current approach. Whether this is vector search, BM25 or hybrid search, reranking will deliver semantic relevance gains at the top of your search results list. +image::images/esql-field-statistics.png[Field statistics in ES|QL] -This is particularly important for Retrieval Augmented Generation (RAG), given the LLM’s costs and context windows limits. +[discrete] +==== Field statistics embeddable panel in Dashboards + +You can now add field statistics panels with ES|QL support straight within your dashboards, eliminating the need to transition between **Discover** and **Dashboards**. + +image::images/field-statistics-panel-in-dashboards.png[Field statistics embeddable panel in Dashboards] [discrete] -==== Inference API: RBAC +==== Log Rate Analysis contextual insights in serverless Observability + +You can now see insights in natural language, for example for the root cause of a log rate change or threshold alert, in Log Rate Analysis. This feature is currently only available for Observability serverless projects. -Use the new `inference_user` and `inference_admin` built-in roles to easily manage authorization for the inference API and `trained_models` API. The roles include the `manage_inference` and `monitor_inference` privileges which give full access and read access respectively to the inference endpoints. +image::images/obs-log-rate-analysis-insigths.png[Log Rate Analysis contextual insights in serverless Observability] [discrete] -==== AIOps: Log Pattern Analysis is Generally Available +==== Anthropic integration with the Inference API -In 8.14 Log Pattern Analysis becomes GA. Log Pattern Analysis enables faster and smarter investigation across thousands of log messages in order to analyze, troubleshoot and identify the root cause of an incident. Combine it with Anomaly Detection and our other AIOps features to drastically reduce the MTTR. +The inference API provides a seamless, intuitive interface to perform inference and other tasks against proprietary, hosted, and integrated external services. In 8.15, we're extending it to support Anthropic's chat completion API. [discrete] -==== Query history in {esql} data visualizer +==== Support for reranking with the Inference API -We have enhanced the {esql} editor to improve usability and support your workflows. You can now view and re-run your last 20 {esql} queries directly within the {esql} Data Visualizer. +In 8.15, we're also extending the inference API with the ability to host cross encoder models in Elastic and perform the reranking task. -[role="screenshot"] -image::images/esql-data-viz.png[An image of data visualizer for ES|QL.] +[discrete] +=== Global Experience [discrete] -=== Alerting +==== Simplified Sharing + +You can now share a dashboard, search, or lens object in one click. When sharing an object, the most common actions are directly presented to you, and a short link is automatically generated, making it simpler than ever to share your work. + +image::images/share-modal.png[New object share modal, width=50%] [discrete] -==== Kibana case actions +==== “My dashboards” filter -Alerting rules now support a new action that enables you to create cases automatically when alerts are detected. -The case action can aggregate alerts and group them by any alert field and time window. -For example, you can specify that all alerts that are detected by a certain alerting rule in a given time window (for example 7 days) with the same user will be assigned automatically to the same case. For more information, check out <>. +The days of manually scrolling through an endless list of dashboards are behind you. You can now filter by creator to go directly to the dashboards created by a specific teammate. -[role="screenshot"] -image::images/case-action.gif[A gif showing the new case action.] +NOTE: Only dashboards created on or after 8.14 will have a creator. [discrete] -==== {stack-manage-app} Alerts page +==== Quick API keys -A new alerts page is now available to manage alerts as part of the *{stack-manage-app}* menu. The new page enables you to filter alerts by rule type and solution and get a unified view of the alerts that you have authority to view within the space. +Many API keys don’t require custom settings, so we made it simple to generate a standard key. From the **Endpoints & API keys** top menu in Search, you can create a key in seconds. -[role="screenshot"] -image::images/alerts.gif[A looping gif of the new alerts page.] +image::images/create-simple-api-key.png[Shortcut to create an API key, width=60%] [discrete] -==== Jira additional fields support +=== Platform Security -With this Jira connector enhancement, alerts can create enriched Jira issues with a more comprehensive structure that matches the Jira ticket scheme. -A new JSON field is now supported as part of the Jira action so you can define any field to be sent from Kibana alerts to Jira tickets. For more information, check out <>. +[discrete] +==== Filtering by User in Kibana Audit Logs -[role="screenshot"] -image::images/jira-connector.png[An image of the new jira connector panel, width =60%] \ No newline at end of file +We are pleased to share that ignoring events by user in Kibana audit logs is now possible. This enhancement will give you more flexibility to reduce the overall number of events logged by the Kibana audit logs service and to control the volume of data being generated in audit logs. While we currently offer a number of ways to do this using the `xpack.security.audit.ignore_filters.[]` configuration setting, there wasn't an easy option to filter by user. With this addition, you can configure Kibana audit logs to ignore events based on values from the following fields: users, spaces, outcomes, categories, types and actions. \ No newline at end of file diff --git a/oas_docs/makefile b/oas_docs/makefile index ae8f7f2e77ce3..ec99abaf9e40d 100644 --- a/oas_docs/makefile +++ b/oas_docs/makefile @@ -16,12 +16,11 @@ .PHONY: api-docs api-docs: ## Generate kibana.serverless.yaml and kibana.yaml @npx @redocly/cli join "kibana.info.serverless.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml" "../packages/core/saved-objects/docs/openapi/bundled_serverless.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" -o "output/kibana.serverless.yaml" "bundle.serverless.json" --prefix-components-with-info-prop title - @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title + @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title .PHONY: api-docs-stateful api-docs-stateful: ## Generate only kibana.yaml - @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title -# Temporarily omit "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" due to OAS version + @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title # Temporarily omit "../x-pack/plugins/fleet/common/openapi/bundled.yaml" due to internals tag and tag sorting .PHONY: api-docs-serverless @@ -30,8 +29,7 @@ api-docs-serverless: ## Generate only kibana.serverless.yaml .PHONY: api-docs-lint api-docs-lint: ## Run spectral API docs linter - @npx @stoplight/spectral-cli lint "output/kibana.serverless.yaml" --ruleset ".spectral.yaml" - @npx @stoplight/spectral-cli lint "output/kibana.yaml" --ruleset ".spectral.yaml" + @npx @stoplight/spectral-cli lint "output/*.yaml" --ruleset ".spectral.yaml" .PHONY: api-docs-lint-stateful api-docs-lint-stateful: ## Run spectral API docs linter on kibana.yaml diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 2874041b76012..7629eb0319cbc 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -1075,7 +1075,7 @@ paths: $ref: '#/components/schemas/Machine_learning_APIs_mlSync4xxResponse' /api/saved_objects/_export: post: - summary: Export saved objects in the default space + summary: Export saved objects operationId: exportSavedObjectsDefault description: > Retrieve sets of saved objects that you want to import into Kibana. @@ -1083,6 +1083,10 @@ paths: You must include `type` or `objects` in the request body. + Exported saved objects are not backwards compatible and cannot be + imported into an older version of Kibana. + + NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported. @@ -1147,11 +1151,9 @@ paths: application/json: schema: $ref: '#/components/schemas/Serverless_saved_objects_400_response' - security: - - Serverless_saved_objects_apiKeyAuth: [] /api/saved_objects/_import: post: - summary: Import saved objects in the default space + summary: Import saved objects operationId: importSavedObjectsDefault description: > Create sets of Kibana saved objects from a file created by the export @@ -1275,119 +1277,6 @@ paths: application/json: schema: $ref: '#/components/schemas/Serverless_saved_objects_400_response' - security: - - Serverless_saved_objects_apiKeyAuth: [] - /s/{spaceId}/api/saved_objects/_export: - post: - summary: Export saved objects - operationId: exportSavedObjects - description: > - Retrieves sets of saved objects that you want to import into Kibana. - - You must include `type` or `objects` in the request body. - - - NOTE: The `savedObjects.maxImportExportSize` configuration setting - limits the number of saved objects which may be exported. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - tags: - - saved objects - parameters: - - $ref: '#/components/parameters/Serverless_saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Serverless_saved_objects_space_id' - requestBody: - required: true - content: - application/json: - schema: - $ref: >- - #/components/schemas/Serverless_saved_objects_export_objects_request - examples: - exportSavedObjectsRequest: - $ref: >- - #/components/examples/Serverless_saved_objects_export_objects_request - responses: - '200': - description: Indicates a successful call. - content: - application/x-ndjson: - schema: - type: object - additionalProperties: true - examples: - exportSavedObjectsResponse: - $ref: >- - #/components/examples/Serverless_saved_objects_export_objects_response - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/Serverless_saved_objects_400_response' - security: - - Serverless_saved_objects_apiKeyAuth: [] - /s/{spaceId}/api/saved_objects/_import: - post: - summary: Import saved objects - operationId: importSavedObjects - description: > - Creates sets of Kibana saved objects from a file created by the export - API. - - Saved objects can be imported only into the same version, a newer minor - on the same major, or the next major. Exported saved objects are not - backwards compatible and cannot be imported into an older version of - Kibana. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - tags: - - saved objects - parameters: - - $ref: '#/components/parameters/Serverless_saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Serverless_saved_objects_space_id' - - $ref: '#/components/parameters/Serverless_saved_objects_compatibility_mode' - - $ref: '#/components/parameters/Serverless_saved_objects_create_new_copies' - - $ref: '#/components/parameters/Serverless_saved_objects_overwrite' - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: >- - #/components/schemas/Serverless_saved_objects_import_objects_request - examples: - importObjectsRequest: - $ref: >- - #/components/examples/Serverless_saved_objects_import_objects_request - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - $ref: >- - #/components/schemas/Serverless_saved_objects_200_import_objects_response - examples: - importObjectsResponse: - $ref: >- - #/components/examples/Serverless_saved_objects_import_objects_response - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/Serverless_saved_objects_400_response' - security: - - Serverless_saved_objects_apiKeyAuth: [] /s/{spaceId}/api/observability/slos: post: summary: Create an SLO @@ -1948,49 +1837,6 @@ components: name: kbn-xsrf description: Cross-site request forgery protection required: true - Serverless_saved_objects_space_id: - in: path - name: spaceId - description: >- - An identifier for the space. If `/s/` and the identifier are omitted - from the path, the default space is used. - required: true - schema: - type: string - example: default - Serverless_saved_objects_compatibility_mode: - in: query - name: compatibilityMode - schema: - type: boolean - required: false - description: > - Applies various adjustments to the saved objects that are being imported - to maintain compatibility between different Kibana versions. Use this - option only if you encounter issues with imported saved objects. NOTE: - This option cannot be used with the `createNewCopies` option. - Serverless_saved_objects_create_new_copies: - in: query - name: createNewCopies - schema: - type: boolean - required: false - description: > - Creates copies of saved objects, regenerates each object ID, and resets - the origin. When used, potential conflict errors are avoided. NOTE: This - option cannot be used with the `overwrite` and `compatibilityMode` - options. - Serverless_saved_objects_overwrite: - in: query - name: overwrite - schema: - type: boolean - required: false - description: > - Overwrites saved objects when they already exist. When used, potential - conflict errors are automatically resolved by overwriting the - destination object. NOTE: This option cannot be used with the - `createNewCopies` option. SLOs_kbn_xsrf: schema: type: string @@ -5520,77 +5366,6 @@ components: type: integer enum: - 400 - Serverless_saved_objects_export_objects_request: - type: object - properties: - excludeExportDetails: - description: Do not add export details entry at the end of the stream. - type: boolean - default: false - includeReferencesDeep: - description: Includes all of the referenced objects in the exported objects. - type: boolean - objects: - description: A list of objects to export. - type: array - items: - type: object - type: - description: >- - The saved object types to include in the export. Use `*` to export - all the types. - oneOf: - - type: string - - type: array - items: - type: string - Serverless_saved_objects_import_objects_request: - type: object - properties: - file: - description: > - A file exported using the export API. NOTE: The - `savedObjects.maxImportExportSize` configuration setting limits the - number of saved objects which may be included in this file. - Similarly, the `savedObjects.maxImportPayloadBytes` setting limits - the overall size of the file that can be imported. - Serverless_saved_objects_200_import_objects_response: - type: object - properties: - success: - type: boolean - description: > - Indicates when the import was successfully completed. When set to - false, some objects may not have been created. For additional - information, refer to the `errors` and `successResults` properties. - successCount: - type: integer - description: Indicates the number of successfully imported records. - errors: - type: array - items: - type: object - description: > - Indicates the import was unsuccessful and specifies the objects that - failed to import. - - - NOTE: One object may result in multiple errors, which requires - separate steps to resolve. For instance, a `missing_references` - error and conflict error. - successResults: - type: array - items: - type: object - description: > - Indicates the objects that are successfully imported, with any - metadata if applicable. - - - NOTE: Objects are created only when all resolvable errors are - addressed, including conflicts and missing references. If objects - are created as new copies, each entry in the `successResults` array - includes a `destinationId` attribute. SLOs_indicator_properties_apm_availability: title: APM availability required: @@ -8871,14 +8646,6 @@ components: enum: - 404 securitySchemes: - Serverless_saved_objects_apiKeyAuth: - type: apiKey - in: header - name: Authorization - description: > - Serverless APIs support only key-based authentication. You must create - an API key and use the encoded value in the request header. For example: - 'Authorization: ApiKey base64AccessApiKey'. Kibana_HTTP_APIs_apiKeyAuth: in: header name: Authorization diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 6a9315b3018ba..551ab3149dda9 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -61,6 +61,9 @@ servers: description: local - url: http://localhost:5622 tags: + - name: alerting + description: Alerting APIs enable you to create and manage rules and alerts. + x-displayName: alerting - name: APM agent keys description: > Configure APM agent keys to authorize requests from APM agents to the APM @@ -97,229 +100,306 @@ tags: - name: system x-displayName: system paths: - /api/apm/agent_keys: + /api/alerting/rule: post: - summary: Create an APM agent key - description: Create a new agent key for APM. - operationId: createAgentKey + summary: Create a rule with a random identifier + operationId: createRule + description: > + To create a rule, you must have `all` privileges for the appropriate + Kibana features, depending on the `consumer` and `rule_type_id` of the + rule you're creating. For example, you must have privileges for the + **Management > Stack rules** feature, **Analytics > Discover** and + **Machine Learning** features, **Observability** features, or + **Security** features. If the rule has actions, you must also have + `read` privileges for the **Management > Actions and Connectors** + feature. This API supports both key- and token-based authentication. To + use key-based authentication, create an API key in Kibana and use it in + the header of the API call. To use token-based authentication, provide a + username and password; an API key that matches the current privileges of + the user is created automatically. In both cases, the API key is + subsequently used for authorization when the rule runs. tags: - - APM agent keys + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' requestBody: required: true content: application/json: schema: - type: object - properties: - name: - type: string - privileges: - type: array - items: - type: string - enum: - - event:write - - config_agent:read + $ref: '#/components/schemas/Alerting_create_rule_request' + examples: + createEsQueryEsqlRuleRequest: + $ref: >- + #/components/examples/Alerting_create_es_query_esql_rule_request + createEsQueryRuleRequest: + $ref: '#/components/examples/Alerting_create_es_query_rule_request' + createEsQueryKqlRuleRequest: + $ref: >- + #/components/examples/Alerting_create_es_query_kql_rule_request + createIndexThresholdRuleRequest: + $ref: >- + #/components/examples/Alerting_create_index_threshold_rule_request + createTrackingContainmentRuleRequest: + $ref: >- + #/components/examples/Alerting_create_tracking_containment_rule_request responses: '200': - description: Agent key created successfully + description: Indicates a successful call. content: application/json: schema: - type: object - properties: - api_key: - type: string - expiration: - type: integer - format: int64 - id: - type: string - name: - type: string - encoded: - type: string - /api/apm/services/{serviceName}/annotation/search: + $ref: '#/components/schemas/Alerting_rule_response_properties' + examples: + createEsQueryEsqlRuleResponse: + $ref: >- + #/components/examples/Alerting_create_es_query_esql_rule_response + createEsQueryRuleResponse: + $ref: '#/components/examples/Alerting_create_es_query_rule_response' + createEsQueryKqlRuleResponse: + $ref: >- + #/components/examples/Alerting_create_es_query_kql_rule_response + createIndexThresholdRuleResponse: + $ref: >- + #/components/examples/Alerting_create_index_threshold_rule_response + createTrackingContainmentRuleResponse: + $ref: >- + #/components/examples/Alerting_create_tracking_containment_rule_response + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_404_response' + /api/alerting/rule/{ruleId}: get: - summary: Search for annotations - description: Search for annotations related to a specific service. - operationId: getAnnotation + summary: Get rule details + operationId: getRule + description: > + You must have `read` privileges for the appropriate Kibana features, + depending on the `consumer` and `rule_type_id` of the rules you're + seeking. For example, the **Management > Stack Rules** feature, + **Analytics > Discover** and **Machine Learning** features, + **Observability** features, or **Security** features. To get rules + associated with the **Stack Monitoring** feature, use the + `monitoring_user` built-in role. tags: - - APM annotations + - alerting parameters: - - name: serviceName - in: path - required: true - description: The name of the service - schema: - type: string - - name: environment - in: query - required: false - description: The environment to filter annotations by - schema: - type: string - - name: start - in: query - required: false - description: The start date for the search - schema: - type: string - - name: end - in: query - required: false - description: The end date for the search - schema: - type: string + - $ref: '#/components/parameters/Alerting_rule_id' responses: '200': - description: Successful response + description: Indicates a successful call. content: application/json: schema: - type: object - properties: - annotations: - type: array - items: - type: object - properties: - type: - type: string - enum: - - version - id: - type: string - '@timestamp': - type: number - text: - type: string - /api/apm/services/{serviceName}/annotation: + $ref: '#/components/schemas/Alerting_rule_response_properties' + examples: + getRuleResponse: + $ref: '#/components/examples/Alerting_get_rule_response' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_404_response' + delete: + summary: Delete a rule + operationId: deleteRule + description: > + To delete a rule, you must have `all` privileges for the appropriate + Kibana features, depending on the `consumer` and `rule_type_id` of the + rule you're deleting. For example, the **Management** > **Stack Rules** + feature, **Analytics** > **Discover** or **Machine Learning** features, + **Observability**, or **Security** features. WARNING: After you delete a + rule, you cannot recover it. If the API key that is used by the rule was + created automatically, it is deleted. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_rule_id' + responses: + '204': + description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_404_response' post: - summary: Create a service annotation - description: Create a new annotation for a specific service. - operationId: createAnnotation + summary: Create a rule + operationId: createRuleId + description: > + This API creates a rule with a specific rule identifier. If you omit the + identifer, it is automatically generated. To create a rule, you must + have `all` privileges for the appropriate Kibana features, depending on + the `consumer` and `rule_type_id` of the rule you're creating. For + example, you must have privileges for the **Management > Stack rules** + feature, **Analytics > Discover** and **Machine Learning** features, + **Observability** features, or **Security** features. If the rule has + actions, you must also have `read` privileges for the **Management > + Actions and Connectors** feature. This API supports both key- and + token-based authentication. To use key-based authentication, create an + API key in Kibana and use it in the header of the API call. To use + token-based authentication, provide a username and password; an API key + that matches the current privileges of the user is created + automatically. In both cases, the API key is subsequently used for + authorization when the rule runs. tags: - - APM annotations + - alerting parameters: - - name: serviceName - in: path + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: ruleId + description: > + An UUID v1 or v4 identifier for the rule. If you omit this + parameter, an identifier is randomly generated. required: true - description: The name of the service schema: type: string + example: ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 requestBody: required: true content: application/json: schema: - type: object - properties: - '@timestamp': - type: string - service: - type: object - properties: - version: - type: string - environment: - type: string - message: - type: string - tags: - type: array - items: - type: string + $ref: '#/components/schemas/Alerting_create_rule_request' + examples: + createEsQueryEsqlRuleIdRequest: + $ref: >- + #/components/examples/Alerting_create_es_query_esql_rule_request + createEsQueryRuleIdRequest: + $ref: '#/components/examples/Alerting_create_es_query_rule_request' + createEsQueryKqlRuleIdRequest: + $ref: >- + #/components/examples/Alerting_create_es_query_kql_rule_request + createIndexThreholdRuleIdRequest: + $ref: >- + #/components/examples/Alerting_create_index_threshold_rule_request responses: '200': - description: Annotation created successfully + description: Indicates a successful call. content: application/json: schema: - type: object - properties: - _id: - type: string - _index: - type: string - _source: - type: object - properties: - annotation: - type: string - tags: - type: array - items: - type: string - message: - type: string - service: - type: object - properties: - name: - type: string - environment: - type: string - version: - type: string - event: - type: object - properties: - created: - type: string - '@timestamp': - type: string - /api/cases: - post: - summary: Create a case - operationId: createCaseDefaultSpace + $ref: '#/components/schemas/Alerting_rule_response_properties' + examples: + createEsQueryEsqlRuleIdResponse: + $ref: >- + #/components/examples/Alerting_create_es_query_esql_rule_response + createEsQueryRuleIdResponse: + $ref: '#/components/examples/Alerting_create_es_query_rule_response' + createEsQueryKqlRuleIdResponse: + $ref: >- + #/components/examples/Alerting_create_es_query_kql_rule_response + createIndexThresholdRuleIdResponse: + $ref: >- + #/components/examples/Alerting_create_index_threshold_rule_response + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_404_response' + put: + summary: Update a rule + operationId: updateRule description: > - You must have `all` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the - Kibana feature privileges, depending on the owner of the case you're - creating. + To update a rule, you must have `all` privileges for the appropriate + Kibana features, depending on the `consumer` and `rule_type_id` of the + rule you're updating. For example, you must have privileges for the + **Management > Stack rules** feature, **Analytics > Discover** and + **Machine Learning** features, **Observability** features, or + **Security** features. If the rule has actions, you must also have + `read` privileges for the **Management > Actions and Connectors** + feature. This API supports both key- and token-based authentication. To + use key-based authentication, create an API key in Kibana and use it in + the header of the API call. To use token-based authentication, provide a + username and password; an API key that matches the current privileges of + the user is created automatically. In both cases, the API key is + subsequently used for authorization when the rule runs. NOTE: If the API + key has different privileges than the key that created or most recently + updated the rule, the rule behavior might change. Though some properties + are optional, when you update the rule the existing property values are + overwritten with default values. Therefore, it is recommended to + explicitly set all property values. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_rule_id' requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/Cases_create_case_request' + $ref: '#/components/schemas/Alerting_update_rule_request' examples: - createCaseRequest: - $ref: '#/components/examples/Cases_create_case_request' + updateRuleRequest: + $ref: '#/components/examples/Alerting_update_rule_request' responses: '200': description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/Cases_case_response_properties' + $ref: '#/components/schemas/Alerting_rule_response_properties' examples: - createCaseResponse: - $ref: '#/components/examples/Cases_create_case_response' + updateRuleResponse: + $ref: '#/components/examples/Alerting_update_rule_response' '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - delete: - summary: Delete cases - operationId: deleteCaseDefaultSpace + $ref: '#/components/schemas/Alerting_401_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_404_response' + /api/alerting/rule/{ruleId}/_disable: + post: + summary: Disable a rule + operationId: disableRule description: > - You must have `read` or `all` privileges and the `delete` sub-feature - privilege for the **Cases** feature in the **Management**, - **Observability**, or **Security** section of the Kibana feature - privileges, depending on the owner of the cases you're deleting. + You must have `all` privileges for the appropriate Kibana features, + depending on the `consumer` and `rule_type_id` of the rule. For example, + the **Management > Stack Rules** feature, **Analytics > Discover** and + **Machine Learning** features, **Observability**, and **Security** + features. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' - - $ref: '#/components/parameters/Cases_ids' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_rule_id' responses: '204': description: Indicates a successful call. @@ -328,72 +408,149 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - patch: - summary: Update cases - operationId: updateCaseDefaultSpace + $ref: '#/components/schemas/Alerting_401_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_404_response' + /api/alerting/rule/{ruleId}/_enable: + post: + summary: Enable a rule + operationId: enableRule description: > - You must have `all` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the - Kibana feature privileges, depending on the owner of the case you're - updating. + To enable a rule, you must have `all` privileges for the appropriate + Kibana features, depending on the `consumer` and `rule_type_id` of the + rule. For example, the **Management > Stack Rules** feature, **Analytics + > Discover** and **Machine Learning** features, **Observability**, and + **Security** features. This API supports both key- and token-based + authentication. To use key-based authentication, create an API key in + Kibana and use it in the header of the API call. To use token-based + authentication, provide a username and password; an API key that matches + the current privileges of the user is created automatically. In both + cases, the API key is subsequently used for authorization when the rule + runs. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_update_case_request' - examples: - updateCaseRequest: - $ref: '#/components/examples/Cases_update_case_request' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_rule_id' responses: - '200': + '204': description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/Cases_case_response_properties' - examples: - updateCaseResponse: - $ref: '#/components/examples/Cases_update_case_response' - '401': - description: Authorization information is missing or invalid. + $ref: '#/components/schemas/Alerting_401_response' + '404': + description: Object is not found. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/_find: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerting/rules/_find: get: - summary: Search cases - operationId: findCasesDefaultSpace + summary: Find rule information + operationId: findRules description: > - You must have `read` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the cases you're seeking. + You must have `read` privileges for the appropriate Kibana features, + depending on the `consumer` and `rule_type_id` of the rules you're + seeking. For example, you must have privileges for the **Management > + Stack rules** feature, **Analytics > Discover** and **Machine Learning** + features, **Observability** features, or **Security** features. To find + rules associated with the **Stack Monitoring** feature, use the + `monitoring_user` built-in role. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_assignees' - - $ref: '#/components/parameters/Cases_category' - - $ref: '#/components/parameters/Cases_defaultSearchOperator' - - $ref: '#/components/parameters/Cases_from' - - $ref: '#/components/parameters/Cases_owner' - - $ref: '#/components/parameters/Cases_page_index' - - $ref: '#/components/parameters/Cases_page_size' - - $ref: '#/components/parameters/Cases_reporters' - - $ref: '#/components/parameters/Cases_search' - - $ref: '#/components/parameters/Cases_searchFields' - - $ref: '#/components/parameters/Cases_severity' - - $ref: '#/components/parameters/Cases_sortField' - - $ref: '#/components/parameters/Cases_sort_order' - - $ref: '#/components/parameters/Cases_status' - - $ref: '#/components/parameters/Cases_tags' - - $ref: '#/components/parameters/Cases_to' + - name: default_search_operator + in: query + description: The default operator to use for the simple_query_string. + schema: + type: string + default: OR + example: OR + - name: fields + in: query + description: The fields to return in the `attributes` key of the response. + schema: + type: array + items: + type: string + - name: filter + in: query + description: > + A KQL string that you filter with an attribute from your saved + object. It should look like `savedObjectType.attributes.title: + "myTitle"`. However, if you used a direct attribute of a saved + object, such as `updatedAt`, you must define your filter, for + example, `savedObjectType.updatedAt > 2018-12-22`. + schema: + type: string + - name: has_reference + in: query + description: >- + Filters the rules that have a relation with the reference objects + with a specific type and identifier. + schema: + type: object + properties: + id: + type: string + type: + type: string + - name: page + in: query + description: The page number to return. + schema: + type: integer + default: 1 + example: 1 + - name: per_page + in: query + description: The number of rules to return per page. + schema: + type: integer + default: 20 + example: 20 + - name: search + in: query + description: >- + An Elasticsearch simple_query_string query that filters the objects + in the response. + schema: + type: string + example: threshold +-test* + - name: search_fields + in: query + description: The fields to perform the simple_query_string parsed query against. + schema: + oneOf: + - type: string + example: name + - type: array + items: + type: string + - name: sort_field + in: query + description: > + Determines which field is used to sort the results. The field must + exist in the `attributes` key of the response. + schema: + type: string + - name: sort_order + in: query + description: Determines the sort order. + schema: + type: string + enum: + - asc + - desc + default: desc + example: asc responses: '200': description: Indicates a successful call. @@ -402,17 +559,10 @@ paths: schema: type: object properties: - cases: + data: type: array - maxItems: 10000 items: - $ref: '#/components/schemas/Cases_case_response_properties' - count_closed_cases: - type: integer - count_in_progress_cases: - type: integer - count_open_cases: - type: integer + $ref: '#/components/schemas/Alerting_rule_response_properties' page: type: integer per_page: @@ -420,68 +570,120 @@ paths: total: type: integer examples: - findCaseResponse: - $ref: '#/components/examples/Cases_find_case_response' + findRulesResponse: + $ref: '#/components/examples/Alerting_find_rules_response' + findConditionalActionRulesResponse: + $ref: >- + #/components/examples/Alerting_find_rules_response_conditional_action '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/alerts/{alertId}: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerting/_health: get: - summary: Get cases for an alert - operationId: getCasesByAlertDefaultSpace + summary: Get the alerting framework health + operationId: getAlertingHealth description: > - You must have `read` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the cases you're seeking. - x-technical-preview: true + You must have `read` privileges for the **Management > Stack Rules** + feature or for at least one of the **Analytics > Discover**, **Analytics + > Machine Learning**, **Observability**, or **Security** features. tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_alert_id' - - $ref: '#/components/parameters/Cases_owner' + - alerting responses: '200': description: Indicates a successful call. content: application/json: schema: - type: array - maxItems: 10000 - items: - type: object - properties: - id: - type: string - description: The case identifier. - title: - type: string - description: The case title. - example: - - id: 06116b80-e1c3-11ec-be9b-9b1838238ee6 - title: security_case + type: object + properties: + alerting_framework_health: + type: object + description: > + Three substates identify the health of the alerting + framework: `decryption_health`, `execution_health`, and + `read_health`. + properties: + decryption_health: + type: object + description: The timestamp and status of the rule decryption. + properties: + status: + type: string + example: ok + enum: + - error + - ok + - warn + timestamp: + type: string + format: date-time + example: '2023-01-13T01:28:00.280Z' + execution_health: + type: object + description: The timestamp and status of the rule run. + properties: + status: + type: string + example: ok + enum: + - error + - ok + - warn + timestamp: + type: string + format: date-time + example: '2023-01-13T01:28:00.280Z' + read_health: + type: object + description: The timestamp and status of the rule reading events. + properties: + status: + type: string + example: ok + enum: + - error + - ok + - warn + timestamp: + type: string + format: date-time + example: '2023-01-13T01:28:00.280Z' + has_permanent_encryption_key: + type: boolean + description: >- + If `false`, the encrypted saved object plugin does not + have a permanent encryption key. + example: true + is_sufficiently_secure: + type: boolean + description: If `false`, security is enabled but TLS is not. + example: true + examples: + getAlertingHealthResponse: + $ref: '#/components/examples/Alerting_get_health_response' '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/configure: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerting/rule_types: get: - summary: Get case settings - operationId: getCaseConfigurationDefaultSpace + summary: Get the rule types + operationId: getRuleTypes description: > - Get setting details such as the closure type, custom fields, templatse, - and the default connector for cases. You must have `read` privileges for - the **Cases** feature in the **Management**, **Observability**, or - **Security** section of the Kibana feature privileges, depending on - where the cases were created. + If you have `read` privileges for one or more Kibana features, the API + response contains information about the appropriate rule types. For + example, there are rule types associated with the **Management > Stack + Rules** feature, **Analytics > Discover** and **Machine Learning** + features, **Observability** features, and **Security** features. To get + rule types associated with the **Stack Monitoring** feature, use the + `monitoring_user` built-in role. tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_owner' + - alerting responses: '200': description: Indicates a successful call. @@ -492,727 +694,1029 @@ paths: items: type: object properties: - closure_type: - $ref: '#/components/schemas/Cases_closure_types' - connector: + action_groups: + description: > + An explicit list of groups for which the rule type can + schedule actions, each with the action group's unique ID + and human readable name. Rule actions validation uses + this configuration to ensure that groups are valid. + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + action_variables: + description: > + A list of action variables that the rule type makes + available via context and state in action parameter + templates, and a short human readable description. When + you create a rule in Kibana, it uses this information to + prompt you for these variables in action parameter + editors. type: object properties: - fields: - description: >- - The fields specified in the case configuration are - not used and are not propagated to individual cases, - therefore it is recommended to set it to `null`. - nullable: true - type: object - id: - description: >- - The identifier for the connector. If you do not want - a default connector, use `none`. To retrieve - connector IDs, use the find connectors API. - type: string - example: none - name: - description: >- - The name of the connector. If you do not want a - default connector, use `none`. To retrieve connector - names, use the find connectors API. - type: string - example: none - type: - $ref: '#/components/schemas/Cases_connector_types' - created_at: - type: string - format: date-time - example: '2022-06-01T17:07:17.767Z' - created_by: + context: + type: array + items: + type: object + properties: + name: + type: string + description: + type: string + useWithTripleBracesInTemplates: + type: boolean + params: + type: array + items: + type: object + properties: + description: + type: string + name: + type: string + state: + type: array + items: + type: object + properties: + description: + type: string + name: + type: string + alerts: type: object - required: - - email - - full_name - - username + description: > + Details for writing alerts as data documents for this + rule type. properties: - email: + context: type: string - example: null - nullable: true - full_name: + description: | + The namespace for this rule type. + enum: + - ml.anomaly-detection + - observability.apm + - observability.logs + - observability.metrics + - observability.slo + - observability.threshold + - observability.uptime + - security + - stack + dynamic: type: string - example: null - nullable: true - username: + description: Indicates whether new fields are added dynamically. + enum: + - 'false' + - runtime + - strict + - 'true' + isSpaceAware: + type: boolean + description: > + Indicates whether the alerts are space-aware. If + true, space-specific alert indices are used. + mappings: + type: object + properties: + fieldMap: + type: object + description: > + Mapping information for each field supported in + alerts as data documents for this rule type. For + more information about mapping parameters, refer + to the Elasticsearch documentation. + additionalProperties: + $ref: >- + #/components/schemas/Alerting_fieldmap_properties + secondaryAlias: type: string - example: elastic - nullable: true - profile_uid: - type: string - example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 - customFields: - type: array - description: Custom fields configuration details. - items: - type: object - properties: - defaultValue: - oneOf: - - type: string - - type: boolean - description: > - A default value for the custom field. If the - `type` is `text`, the default value must be a - string. If the `type` is `toggle`, the default - value must be boolean. - key: - description: > - A unique key for the custom field. Must be lower - case and composed only of a-z, 0-9, '_', and '-' - characters. It is used in API calls to refer to a - specific custom field. - type: string - minLength: 1 - maxLength: 36 - label: - description: >- - The custom field label that is displayed in the - case. - type: string - minLength: 1 - maxLength: 50 - required: - description: > - Indicates whether the field is required. If - `false`, the custom field can be set to null or - omitted when a case is created or updated. - type: boolean - type: - description: The type of the custom field. - type: string - enum: - - text - - toggle - error: + description: > + A secondary alias. It is typically used to support + the signals alias for detection rules. + shouldWrite: + type: boolean + description: > + Indicates whether the rule should write out alerts + as data. + useEcs: + type: boolean + description: > + Indicates whether to include the ECS component + template for the alerts. + useLegacyAlerts: + type: boolean + default: false + description: > + Indicates whether to include the legacy component + template for the alerts. + authorized_consumers: + description: >- + The list of the plugins IDs that have access to the rule + type. + type: object + properties: + alerts: + type: object + properties: + all: + type: boolean + read: + type: boolean + apm: + type: object + properties: + all: + type: boolean + read: + type: boolean + discover: + type: object + properties: + all: + type: boolean + read: + type: boolean + infrastructure: + type: object + properties: + all: + type: boolean + read: + type: boolean + logs: + type: object + properties: + all: + type: boolean + read: + type: boolean + ml: + type: object + properties: + all: + type: boolean + read: + type: boolean + monitoring: + type: object + properties: + all: + type: boolean + read: + type: boolean + siem: + type: object + properties: + all: + type: boolean + read: + type: boolean + slo: + type: object + properties: + all: + type: boolean + read: + type: boolean + stackAlerts: + type: object + properties: + all: + type: boolean + read: + type: boolean + uptime: + type: object + properties: + all: + type: boolean + read: + type: boolean + category: type: string - nullable: true - example: null + description: >- + The rule category, which is used by features such as + category-specific maintenance windows. + enum: + - management + - observability + - securitySolution + default_action_group_id: + description: The default identifier for the rule type group. + type: string + does_set_recovery_context: + description: >- + Indicates whether the rule passes context variables to + its recovery action. + type: boolean + enabled_in_license: + description: >- + Indicates whether the rule type is enabled or disabled + based on the subscription. + type: boolean + has_alerts_mappings: + type: boolean + description: >- + Indicates whether the rule type has custom mappings for + the alert data. + has_fields_for_a_a_d: + type: boolean id: + description: The unique identifier for the rule type. type: string - example: 4a97a440-e1cd-11ec-be9b-9b1838238ee6 - mappings: - type: array - items: - type: object - properties: - action_type: - type: string - example: overwrite - source: - type: string - example: title - target: - type: string - example: summary - owner: - $ref: '#/components/schemas/Cases_owners' - templates: - $ref: '#/components/schemas/Cases_templates' - updated_at: + is_exportable: + description: >- + Indicates whether the rule type is exportable in **Stack + Management > Saved Objects**. + type: boolean + minimum_license_required: + description: The subscriptions required to use the rule type. type: string - format: date-time - nullable: true - example: '2022-06-01T19:58:48.169Z' - updated_by: + example: basic + name: + description: The descriptive name of the rule type. + type: string + producer: + description: >- + An identifier for the application that produces this + rule type. + type: string + example: stackAlerts + recovery_action_group: + description: >- + An action group to use when an alert goes from an active + state to an inactive one. type: object - required: - - email - - full_name - - username properties: - email: - type: string - example: null - nullable: true - full_name: - type: string - example: null - nullable: true - username: + id: type: string - example: elastic - nullable: true - profile_uid: + name: type: string - example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 - nullable: true - version: + rule_task_timeout: type: string - example: WzIwNzMsMV0= + example: 5m examples: - getConfigurationResponse: - $ref: '#/components/examples/Cases_get_case_configuration_response' + getRuleTypesResponse: + $ref: '#/components/examples/Alerting_get_rule_types_response' '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' + $ref: '#/components/schemas/Alerting_401_response' + /api/alerting/rule/{ruleId}/_mute_all: post: - summary: Add case settings - operationId: setCaseConfigurationDefaultSpace + summary: Mute all alerts + operationId: muteAllAlerts description: > - Case settings include external connection details, custom fields, and - templates. Connectors are used to interface with external systems. You - must create a connector before you can use it in your cases. If you set - a default connector, it is automatically selected when you create cases - in Kibana. If you use the create case API, however, you must still - specify all of the connector details. You must have `all` privileges for - the **Cases** feature in the **Management**, **Observability**, or - **Security** section of the Kibana feature privileges, depending on - where you are creating cases. + This API snoozes the notifications for the rule indefinitely. The rule + checks continue to occur but alerts will not trigger any actions. You + must have `all` privileges for the appropriate Kibana features, + depending on the `consumer` and `rule_type_id` of the rule. For example, + the **Management > Stack Rules** feature, **Analytics > Discover** and + **Machine Learning** features, **Observability**, and **Security** + features. If the rule has actions, you must also have `read` privileges + for the **Management > Actions and Connectors** feature. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_set_case_configuration_request' - examples: - setCaseConfigRequest: - $ref: '#/components/examples/Cases_set_case_configuration_request' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_rule_id' + responses: + '204': + description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerting/rule/{ruleId}/_unmute_all: + post: + summary: Unmute all alerts + operationId: unmuteAllAlerts + description: > + If the rule has its notifications snoozed indefinitely, this API cancels + the snooze. You must have `all` privileges for the appropriate Kibana + features, depending on the `consumer` and `rule_type_id` of the rule. + For example, the **Management > Stack Rules** feature, **Analytics > + Discover** and **Machine Learning** features, **Observability**, and + **Security** features. If the rule has actions, you must also have + `read` privileges for the **Management > Actions and Connectors** + feature. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_rule_id' + responses: + '204': + description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerting/rule/{ruleId}/_update_api_key: + post: + summary: Update the API key for a rule + operationId: updateRuleAPIKey + description: >- + The new API key has the credentials of the user that submits the + request. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_rule_id' responses: '200': description: Indicates a successful call. + '400': + description: Bad request content: application/json: schema: - type: object - properties: - closure_type: - $ref: '#/components/schemas/Cases_closure_types' - connector: - type: object - properties: - fields: - description: >- - The fields specified in the case configuration are not - used and are not propagated to individual cases, - therefore it is recommended to set it to `null`. - nullable: true - type: object - id: - description: >- - The identifier for the connector. If you do not want a - default connector, use `none`. To retrieve connector - IDs, use the find connectors API. - type: string - example: none - name: - description: >- - The name of the connector. If you do not want a - default connector, use `none`. To retrieve connector - names, use the find connectors API. - type: string - example: none - type: - $ref: '#/components/schemas/Cases_connector_types' - created_at: - type: string - format: date-time - example: '2022-06-01T17:07:17.767Z' - created_by: - type: object - required: - - email - - full_name - - username - properties: - email: - type: string - example: null - nullable: true - full_name: - type: string - example: null - nullable: true - username: - type: string - example: elastic - nullable: true - profile_uid: - type: string - example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 - customFields: - type: array - description: Custom fields configuration details. - items: - type: object - properties: - defaultValue: - oneOf: - - type: string - - type: boolean - description: > - A default value for the custom field. If the `type` - is `text`, the default value must be a string. If - the `type` is `toggle`, the default value must be - boolean. - key: - description: > - A unique key for the custom field. Must be lower - case and composed only of a-z, 0-9, '_', and '-' - characters. It is used in API calls to refer to a - specific custom field. - type: string - minLength: 1 - maxLength: 36 - label: - description: >- - The custom field label that is displayed in the - case. - type: string - minLength: 1 - maxLength: 50 - required: - description: > - Indicates whether the field is required. If `false`, - the custom field can be set to null or omitted when - a case is created or updated. - type: boolean - type: - description: The type of the custom field. - type: string - enum: - - text - - toggle - error: - type: string - nullable: true - example: null - id: - type: string - example: 4a97a440-e1cd-11ec-be9b-9b1838238ee6 - mappings: - type: array - items: - type: object - properties: - action_type: - type: string - example: overwrite - source: - type: string - example: title - target: - type: string - example: summary - owner: - $ref: '#/components/schemas/Cases_owners' - templates: - $ref: '#/components/schemas/Cases_templates' - updated_at: - type: string - format: date-time - nullable: true - example: '2022-06-01T19:58:48.169Z' - updated_by: - type: object - required: - - email - - full_name - - username - properties: - email: - type: string - example: null - nullable: true - full_name: - type: string - example: null - nullable: true - username: - type: string - example: elastic - nullable: true - profile_uid: - type: string - example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 - nullable: true - version: - type: string - example: WzIwNzMsMV0= - examples: - setCaseConfigResponse: - $ref: '#/components/examples/Cases_set_case_configuration_response' + $ref: '#/components/schemas/Alerting_400_response' + /api/alerting/rule/{ruleId}/alert/{alertId}/_mute: + post: + summary: Mute an alert + operationId: muteAlert + description: > + You must have `all` privileges for the appropriate Kibana features, + depending on the `consumer` and `rule_type_id` of the rule. For example, + the **Management > Stack Rules** feature, **Analytics > Discover** and + **Machine Learning** features, **Observability**, and **Security** + features. If the rule has actions, you must also have `read` privileges + for the **Management > Actions and Connectors** feature. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_alert_id' + - $ref: '#/components/parameters/Alerting_rule_id' + responses: + '204': + description: Indicates a successful call. '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/configure/{configurationId}: - patch: - summary: Update case settings - operationId: updateCaseConfigurationDefaultSpace + $ref: '#/components/schemas/Alerting_401_response' + /api/alerting/rule/{ruleId}/alert/{alertId}/_unmute: + post: + summary: Unmute an alert + operationId: unmuteAlert description: > - Updates setting details such as the closure type, custom fields, - templates, and the default connector for cases. Connectors are used to - interface with external systems. You must create a connector before you - can use it in your cases. You must have `all` privileges for the - **Cases** feature in the **Management**, **Observability**, or - **Security** section of the Kibana feature privileges, depending on - where the case was created. + You must have `all` privileges for the appropriate Kibana features, + depending on the `consumer` and `rule_type_id` of the rule. For example, + the **Management > Stack Rules** feature, **Analytics > Discover** and + **Machine Learning** features, **Observability**, and **Security** + features. If the rule has actions, you must also have `read` privileges + for the **Management > Actions and Connectors** feature. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' - - $ref: '#/components/parameters/Cases_configuration_id' - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_update_case_configuration_request' - examples: - updateCaseConfigurationRequest: - $ref: '#/components/examples/Cases_update_case_configuration_request' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - $ref: '#/components/parameters/Alerting_alert_id' + - $ref: '#/components/parameters/Alerting_rule_id' + responses: + '204': + description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alert/{alertId}: + delete: + summary: Delete an alert + operationId: legaryDeleteAlert + deprecated: true + description: > + Deprecated in 7.13.0. Use the delete rule API instead. WARNING: After + you delete an alert, you cannot recover it. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: The identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 + responses: + '204': + description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + get: + summary: Get an alert by identifier + operationId: legacyGetAlert + deprecated: true + description: Deprecated in 7.13.0. Use the get rule API instead. + tags: + - alerting + parameters: + - in: path + name: alertId + description: The identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - properties: - closure_type: - $ref: '#/components/schemas/Cases_closure_types' - connector: - type: object - properties: - fields: - description: >- - The fields specified in the case configuration are not - used and are not propagated to individual cases, - therefore it is recommended to set it to `null`. - nullable: true - type: object - id: - description: >- - The identifier for the connector. If you do not want a - default connector, use `none`. To retrieve connector - IDs, use the find connectors API. - type: string - example: none - name: - description: >- - The name of the connector. If you do not want a - default connector, use `none`. To retrieve connector - names, use the find connectors API. - type: string - example: none - type: - $ref: '#/components/schemas/Cases_connector_types' - created_at: - type: string - format: date-time - example: '2022-06-01T17:07:17.767Z' - created_by: + $ref: '#/components/schemas/Alerting_alert_response_properties' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + post: + summary: Create an alert + operationId: legacyCreateAlert + deprecated: true + description: Deprecated in 7.13.0. Use the create rule API instead. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: >- + An UUID v1 or v4 identifier for the alert. If this parameter is + omitted, the identifier is randomly generated. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 + requestBody: + required: true + content: + application/json: + schema: + title: Legacy create alert request properties + type: object + required: + - alertTypeId + - consumer + - name + - notifyWhen + - params + - schedule + properties: + actions: + type: array + items: type: object required: - - email - - full_name - - username + - actionTypeId + - group + - id + - params properties: - email: - type: string - example: null - nullable: true - full_name: + actionTypeId: type: string - example: null - nullable: true - username: + description: The identifier for the action type. + group: type: string - example: elastic - nullable: true - profile_uid: + description: > + Grouping actions is recommended for escalations for + different types of alert instances. If you don't need + this functionality, set it to `default`. + id: type: string - example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 - customFields: - type: array - description: Custom fields configuration details. - items: - type: object - properties: - defaultValue: - oneOf: - - type: string - - type: boolean - description: > - A default value for the custom field. If the `type` - is `text`, the default value must be a string. If - the `type` is `toggle`, the default value must be - boolean. - key: - description: > - A unique key for the custom field. Must be lower - case and composed only of a-z, 0-9, '_', and '-' - characters. It is used in API calls to refer to a - specific custom field. - type: string - minLength: 1 - maxLength: 36 - label: - description: >- - The custom field label that is displayed in the - case. - type: string - minLength: 1 - maxLength: 50 - required: - description: > - Indicates whether the field is required. If `false`, - the custom field can be set to null or omitted when - a case is created or updated. - type: boolean - type: - description: The type of the custom field. - type: string - enum: - - text - - toggle - error: - type: string - nullable: true - example: null - id: - type: string - example: 4a97a440-e1cd-11ec-be9b-9b1838238ee6 - mappings: - type: array - items: - type: object - properties: - action_type: - type: string - example: overwrite - source: - type: string - example: title - target: - type: string - example: summary - owner: - $ref: '#/components/schemas/Cases_owners' - templates: - $ref: '#/components/schemas/Cases_templates' - updated_at: + description: The ID of the action saved object. + params: + type: object + description: > + The map to the `params` that the action type will + receive. `params` are handled as Mustache templates + and passed a default set of context. + alertTypeId: + type: string + description: >- + The ID of the alert type that you want to call when the + alert is scheduled to run. + consumer: + type: string + description: >- + The name of the application that owns the alert. This name + has to match the Kibana feature name, as that dictates the + required role-based access control privileges. + enabled: + type: boolean + description: >- + Indicates if you want to run the alert on an interval basis + after it is created. + name: + type: string + description: A name to reference and search. + notifyWhen: + type: string + description: The condition for throttling the notification. + enum: + - onActionGroupChange + - onActiveAlert + - onThrottleInterval + params: + type: object + description: >- + The parameters to pass to the alert type executor `params` + value. This will also validate against the alert type params + validator, if defined. + schedule: + type: object + description: > + The schedule specifying when this alert should be run. A + schedule is structured such that the key specifies the + format you wish to use and its value specifies the schedule. + properties: + interval: + type: string + description: >- + The interval format specifies the interval in seconds, + minutes, hours or days at which the alert should run. + example: 10s + tags: + type: array + items: type: string - format: date-time - nullable: true - example: '2022-06-01T19:58:48.169Z' - updated_by: + description: A list of keywords to reference and search. + throttle: + type: string + description: > + How often this alert should fire the same actions. This will + prevent the alert from sending out the same notification + over and over. For example, if an alert with a schedule of 1 + minute stays in a triggered state for 90 minutes, setting a + throttle of `10m` or `1h` will prevent it from sending 90 + notifications during this period. + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_alert_response_properties' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + put: + summary: Update an alert + operationId: legacyUpdateAlert + deprecated: true + description: Deprecated in 7.13.0. Use the update rule API instead. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: The identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 + requestBody: + required: true + content: + application/json: + schema: + title: Legacy update alert request properties + type: object + required: + - name + - notifyWhen + - params + - schedule + properties: + actions: + type: array + items: type: object required: - - email - - full_name - - username + - actionTypeId + - group + - id + - params properties: - email: + actionTypeId: type: string - example: null - nullable: true - full_name: - type: string - example: null - nullable: true - username: + description: The identifier for the action type. + group: type: string - example: elastic - nullable: true - profile_uid: + description: > + Grouping actions is recommended for escalations for + different types of alert instances. If you don't need + this functionality, set it to `default`. + id: type: string - example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 - nullable: true - version: + description: The ID of the action saved object. + params: + type: object + description: > + The map to the `params` that the action type will + receive. `params` are handled as Mustache templates + and passed a default set of context. + name: + type: string + description: A name to reference and search. + notifyWhen: + type: string + description: The condition for throttling the notification. + enum: + - onActionGroupChange + - onActiveAlert + - onThrottleInterval + params: + type: object + description: >- + The parameters to pass to the alert type executor `params` + value. This will also validate against the alert type params + validator, if defined. + schedule: + type: object + description: > + The schedule specifying when this alert should be run. A + schedule is structured such that the key specifies the + format you wish to use and its value specifies the schedule. + properties: + interval: + type: string + description: >- + The interval format specifies the interval in seconds, + minutes, hours or days at which the alert should run. + example: 1d + tags: + type: array + items: type: string - example: WzIwNzMsMV0= - examples: - updateCaseConfigurationResponse: - $ref: >- - #/components/examples/Cases_update_case_configuration_response + description: A list of keywords to reference and search. + throttle: + type: string + description: > + How often this alert should fire the same actions. This will + prevent the alert from sending out the same notification + over and over. For example, if an alert with a schedule of 1 + minute stays in a triggered state for 90 minutes, setting a + throttle of `10m` or `1h` will prevent it from sending 90 + notifications during this period. + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_alert_response_properties' '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/reporters: - get: - summary: Get case creators - operationId: getCaseReportersDefaultSpace - description: > - Returns information about the users who opened cases. You must have read - privileges for the **Cases** feature in the **Management**, - **Observability**, or **Security** section of the Kibana feature - privileges, depending on the owner of the cases. The API returns - information about the users as they existed at the time of the case - creation, including their name, full name, and email address. If any of - those details change thereafter or if a user is deleted, the information - returned by this API is unchanged. + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alert/{alertId}/_disable: + post: + summary: Disable an alert + operationId: legacyDisableAlert + deprecated: true + description: Deprecated in 7.13.0. Use the disable rule API instead. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_owner' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: The identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 responses: - '200': + '204': description: Indicates a successful call. - content: - application/json: - schema: - type: array - maxItems: 10000 - items: - type: object - required: - - email - - full_name - - username - properties: - email: - type: string - example: null - nullable: true - full_name: - type: string - example: null - nullable: true - username: - type: string - example: elastic - nullable: true - profile_uid: - type: string - example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 - examples: - getReportersResponse: - $ref: '#/components/examples/Cases_get_reporters_response' '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/status: - get: - summary: Get case status summary - operationId: getCaseStatusDefaultSpace - description: > - Returns the number of cases that are open, closed, and in progress. - Deprecated in 8.1.0. This API is deprecated and will be removed in a - future release; use the find cases API instead. You must have `read` - privileges for the **Cases** feature in the **Management**, - **Observability**, or **Security** section of the Kibana feature - privileges, depending on the owner of the cases you're seeking. + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alert/{alertId}/_enable: + post: + summary: Enable an alert + operationId: legacyEnableAlert deprecated: true + description: Deprecated in 7.13.0. Use the enable rule API instead. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_owner' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: The identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 responses: - '200': + '204': description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - type: object - properties: - count_closed_cases: - type: integer - count_in_progress_cases: - type: integer - count_open_cases: - type: integer + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alert/{alertId}/_mute_all: + post: + summary: Mute all alert instances + operationId: legacyMuteAllAlertInstances + deprecated: true + description: Deprecated in 7.13.0. Use the mute all alerts API instead. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: The identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 + responses: + '204': + description: Indicates a successful call. '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/tags: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alert/{alertId}/_unmute_all: + post: + summary: Unmute all alert instances + operationId: legacyUnmuteAllAlertInstances + deprecated: true + description: Deprecated in 7.13.0. Use the unmute all alerts API instead. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: The identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 + responses: + '204': + description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alerts/_find: get: - summary: Get case tags - operationId: getCaseTagsDefaultSpace + summary: Get a paginated set of alerts + operationId: legacyFindAlerts + deprecated: true description: > - Aggregates and returns a list of case tags. You must have read - privileges for the **Cases** feature in the **Management**, - **Observability**, or **Security** section of the Kibana feature - privileges, depending on the owner of the cases you're seeking. + Deprecated in 7.13.0. Use the find rules API instead. NOTE: Alert + `params` are stored as a flattened field type and analyzed as keywords. + As alerts change in Kibana, the results on each page of the response + also change. Use the find API for traditional paginated results, but + avoid using it to export large amounts of data. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_owner' + - name: default_search_operator + in: query + description: The default operator to use for the `simple_query_string`. + schema: + type: string + default: OR + example: OR + - name: fields + in: query + description: The fields to return in the `attributes` key of the response. + schema: + type: array + items: + type: string + - name: filter + in: query + description: > + A KQL string that you filter with an attribute from your saved + object. It should look like `savedObjectType.attributes.title: + "myTitle"`. However, if you used a direct attribute of a saved + object, such as `updatedAt`, you must define your filter, for + example, `savedObjectType.updatedAt > 2018-12-22`. + schema: + type: string + - name: has_reference + in: query + description: >- + Filters the rules that have a relation with the reference objects + with a specific type and identifier. + schema: + type: object + properties: + id: + type: string + type: + type: string + - name: page + in: query + description: The page number to return. + schema: + type: integer + default: 1 + example: 1 + - name: per_page + in: query + description: The number of alerts to return per page. + schema: + type: integer + default: 20 + example: 20 + - name: search + in: query + description: >- + An Elasticsearch `simple_query_string` query that filters the alerts + in the response. + schema: + type: string + - name: search_fields + in: query + description: >- + The fields to perform the `simple_query_string` parsed query + against. + schema: + oneOf: + - type: string + - type: array + items: + type: string + - name: sort_field + in: query + description: > + Determines which field is used to sort the results. The field must + exist in the `attributes` key of the response. + schema: + type: string + - name: sort_order + in: query + description: Determines the sort order. + schema: + type: string + enum: + - asc + - desc + default: desc + example: asc responses: '200': description: Indicates a successful call. content: application/json: schema: - type: array - maxItems: 10000 - items: - type: string - examples: - getTagsResponse: - $ref: '#/components/examples/Cases_get_tags_response' + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/Alerting_alert_response_properties' + page: + type: integer + perPage: + type: integer + total: + type: integer '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alerts/_health: get: - summary: Get case information - operationId: getCaseDefaultSpace - description: > - You must have `read` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the case you're seeking. + summary: Get the alerting framework health + operationId: legacyGetAlertingHealth + deprecated: true + description: Deprecated in 7.13.0. Use the get alerting framework health API instead. tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_case_id' - - $ref: '#/components/parameters/Cases_includeComments' + - alerting responses: '200': description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/Cases_case_response_properties' - examples: - getDefaultCaseResponse: - $ref: '#/components/examples/Cases_get_case_response' - getDefaultObservabilityCaseReponse: - $ref: '#/components/examples/Cases_get_case_observability_response' + type: object + properties: + alertingFrameworkHealth: + type: object + description: > + Three substates identify the health of the alerting + framework: `decryptionHealth`, `executionHealth`, and + `readHealth`. + properties: + decryptionHealth: + type: object + description: The timestamp and status of the alert decryption. + properties: + status: + type: string + example: ok + enum: + - error + - ok + - warn + timestamp: + type: string + format: date-time + example: '2023-01-13T01:28:00.280Z' + executionHealth: + type: object + description: The timestamp and status of the alert execution. + properties: + status: + type: string + example: ok + enum: + - error + - ok + - warn + timestamp: + type: string + format: date-time + example: '2023-01-13T01:28:00.280Z' + readHealth: + type: object + description: The timestamp and status of the alert reading events. + properties: + status: + type: string + example: ok + enum: + - error + - ok + - warn + timestamp: + type: string + format: date-time + example: '2023-01-13T01:28:00.280Z' + hasPermanentEncryptionKey: + type: boolean + description: >- + If `false`, the encrypted saved object plugin does not + have a permanent encryption key. + example: true + isSufficientlySecure: + type: boolean + description: If `false`, security is enabled but TLS is not. + example: true '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}/alerts: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alerts/list_alert_types: get: - summary: Get all alerts for a case - description: > - You must have `read` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the cases you're seeking. - x-technical-preview: true - operationId: getCaseAlertsDefaultSpace + summary: Get the alert types + operationId: legacyGetAlertTypes + deprecated: true + description: Deprecated in 7.13.0. Use the get rule types API instead. tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_case_id' + - alerting responses: '200': description: Indicates a successful call. @@ -1221,99 +1725,367 @@ paths: schema: type: array items: - $ref: '#/components/schemas/Cases_alert_response_properties' - examples: - getCaseAlertsResponse: - $ref: '#/components/examples/Cases_get_case_alerts_response' + type: object + properties: + actionGroups: + description: > + An explicit list of groups for which the alert type can + schedule actions, each with the action group's unique ID + and human readable name. Alert actions validation uses + this configuration to ensure that groups are valid. + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + actionVariables: + description: > + A list of action variables that the alert type makes + available via context and state in action parameter + templates, and a short human readable description. The + Alert UI will use this information to prompt users for + these variables in action parameter editors. + type: object + properties: + context: + type: array + items: + type: object + properties: + name: + type: string + description: + type: string + params: + type: array + items: + type: object + properties: + description: + type: string + name: + type: string + state: + type: array + items: + type: object + properties: + description: + type: string + name: + type: string + authorizedConsumers: + description: >- + The list of the plugins IDs that have access to the + alert type. + type: object + defaultActionGroupId: + description: The default identifier for the alert type group. + type: string + enabledInLicense: + description: >- + Indicates whether the rule type is enabled based on the + subscription. + type: boolean + id: + description: The unique identifier for the alert type. + type: string + isExportable: + description: >- + Indicates whether the alert type is exportable in Saved + Objects Management UI. + type: boolean + minimumLicenseRequired: + description: The subscriptions required to use the alert type. + type: string + name: + description: The descriptive name of the alert type. + type: string + producer: + description: >- + An identifier for the application that produces this + alert type. + type: string + recoveryActionGroup: + description: > + An action group to use when an alert instance goes from + an active state to an inactive one. If it is not + specified, the default recovered action group is used. + type: object + properties: + id: + type: string + name: + type: string '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}/comments: + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alert/{alertId}/alert_instance/{alertInstanceId}/_mute: post: - summary: Add a case comment or alert - operationId: addCaseCommentDefaultSpace - description: > - You must have `all` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the case you're creating. - NOTE: Each case can have a maximum of 1,000 alerts. + summary: Mute an alert instance + operationId: legacyMuteAlertInstance + deprecated: true + description: Deprecated in 7.13.0. Use the mute alert API instead. tags: - - cases + - alerting parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' - - $ref: '#/components/parameters/Cases_case_id' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_add_case_comment_request' - examples: - createCaseCommentRequest: - $ref: '#/components/examples/Cases_add_comment_request' + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: An identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 + - in: path + name: alertInstanceId + description: An identifier for the alert instance. + required: true + schema: + type: string + example: dceeb5d0-6b41-11eb-802b-85b0c1bc8ba2 responses: - '200': + '204': description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_case_response_properties' - examples: - createCaseCommentResponse: - $ref: '#/components/examples/Cases_add_comment_response' + $ref: '#/components/schemas/Alerting_401_response' + /api/alerts/alert/{alertId}/alert_instance/{alertInstanceId}/_unmute: + post: + summary: Unmute an alert instance + operationId: legacyUnmuteAlertInstance + deprecated: true + description: Deprecated in 7.13.0. Use the unmute alert API instead. + tags: + - alerting + parameters: + - $ref: '#/components/parameters/Alerting_kbn_xsrf' + - in: path + name: alertId + description: An identifier for the alert. + required: true + schema: + type: string + example: 41893910-6bca-11eb-9e0d-85d233e3ee35 + - in: path + name: alertInstanceId + description: An identifier for the alert instance. + required: true + schema: + type: string + example: dceeb5d0-6b41-11eb-802b-85b0c1bc8ba2 + responses: + '204': + description: Indicates a successful call. '401': description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - delete: - summary: Delete all case comments and alerts - operationId: deleteCaseCommentsDefaultSpace - description: > - Deletes all comments and alerts from a case. You must have `all` - privileges for the **Cases** feature in the **Management**, - **Observability**, or **Security** section of the Kibana feature - privileges, depending on the owner of the cases you're deleting. + $ref: '#/components/schemas/Alerting_401_response' + /api/apm/agent_keys: + post: + summary: Create an APM agent key + description: Create a new agent key for APM. + operationId: createAgentKey tags: - - cases + - APM agent keys + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + privileges: + type: array + items: + type: string + enum: + - event:write + - config_agent:read + responses: + '200': + description: Agent key created successfully + content: + application/json: + schema: + type: object + properties: + api_key: + type: string + expiration: + type: integer + format: int64 + id: + type: string + name: + type: string + encoded: + type: string + /api/apm/services/{serviceName}/annotation/search: + get: + summary: Search for annotations + description: Search for annotations related to a specific service. + operationId: getAnnotation + tags: + - APM annotations parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' - - $ref: '#/components/parameters/Cases_case_id' + - name: serviceName + in: path + required: true + description: The name of the service + schema: + type: string + - name: environment + in: query + required: false + description: The environment to filter annotations by + schema: + type: string + - name: start + in: query + required: false + description: The start date for the search + schema: + type: string + - name: end + in: query + required: false + description: The end date for the search + schema: + type: string responses: - '204': - description: Indicates a successful call. - '401': - description: Authorization information is missing or invalid. + '200': + description: Successful response content: application/json: schema: - $ref: '#/components/schemas/Cases_4xx_response' - patch: - summary: Update a case comment or alert - operationId: updateCaseCommentDefaultSpace + type: object + properties: + annotations: + type: array + items: + type: object + properties: + type: + type: string + enum: + - version + id: + type: string + '@timestamp': + type: number + text: + type: string + /api/apm/services/{serviceName}/annotation: + post: + summary: Create a service annotation + description: Create a new annotation for a specific service. + operationId: createAnnotation + tags: + - APM annotations + parameters: + - name: serviceName + in: path + required: true + description: The name of the service + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + '@timestamp': + type: string + service: + type: object + properties: + version: + type: string + environment: + type: string + message: + type: string + tags: + type: array + items: + type: string + responses: + '200': + description: Annotation created successfully + content: + application/json: + schema: + type: object + properties: + _id: + type: string + _index: + type: string + _source: + type: object + properties: + annotation: + type: string + tags: + type: array + items: + type: string + message: + type: string + service: + type: object + properties: + name: + type: string + environment: + type: string + version: + type: string + event: + type: object + properties: + created: + type: string + '@timestamp': + type: string + /api/cases: + post: + summary: Create a case + operationId: createCaseDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the case you're updating. - NOTE: You cannot change the comment type or the owner of a comment. + **Management**, **Observability**, or **Security** section of the + Kibana feature privileges, depending on the owner of the case you're + creating. tags: - cases parameters: - $ref: '#/components/parameters/Cases_kbn_xsrf' - - $ref: '#/components/parameters/Cases_case_id' requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/Cases_update_case_comment_request' + $ref: '#/components/schemas/Cases_create_case_request' examples: - updateCaseCommentRequest: - $ref: '#/components/examples/Cases_update_comment_request' + createCaseRequest: + $ref: '#/components/examples/Cases_create_case_request' responses: '200': description: Indicates a successful call. @@ -1322,182 +2094,56 @@ paths: schema: $ref: '#/components/schemas/Cases_case_response_properties' examples: - updateCaseCommentResponse: - $ref: '#/components/examples/Cases_update_comment_response' + createCaseResponse: + $ref: '#/components/examples/Cases_create_case_response' '401': description: Authorization information is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Cases_4xx_response' - get: - summary: Get all case comments - operationId: getAllCaseCommentsDefaultSpace + delete: + summary: Delete cases + operationId: deleteCaseDefaultSpace description: > - Deprecated in 8.1.0. This API is deprecated and will be removed in a - future release; instead, use the get case comment API, which requires a - comment identifier in the path. You must have `read` privileges for the - **Cases** feature in the **Management**, **Observability**, or - **Security** section of the Kibana feature privileges, depending on the - owner of the cases with the comments you're seeking. - deprecated: true + You must have `read` or `all` privileges and the `delete` sub-feature + privilege for the **Cases** feature in the **Management**, + **Observability**, or **Security** section of the Kibana feature + privileges, depending on the owner of the cases you're deleting. tags: - cases parameters: - - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_kbn_xsrf' + - $ref: '#/components/parameters/Cases_ids' responses: - '200': + '204': description: Indicates a successful call. - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_case_response_properties' '401': description: Authorization information is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}/comments/_find: - get: - summary: Find case comments and alerts - operationId: findCaseCommentsDefaultSpace - description: > - Retrieves a paginated list of comments for a case. You must have `read` - privileges for the **Cases** feature in the **Management**, - **Observability**, or **Security** section of the Kibana feature - privileges, depending on the owner of the cases with the comments you're - seeking. - tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_case_id' - - $ref: '#/components/parameters/Cases_page_index' - - $ref: '#/components/parameters/Cases_page_size' - - $ref: '#/components/parameters/Cases_sort_order' - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_case_response_properties' - '401': - description: Authorization information is missing or invalid. - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}/comments/{commentId}: - delete: - summary: Delete a case comment or alert - operationId: deleteCaseCommentDefaultSpace - description: > - You must have `all` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the cases you're deleting. - tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_kbn_xsrf' - - $ref: '#/components/parameters/Cases_case_id' - - $ref: '#/components/parameters/Cases_comment_id' - responses: - '204': - description: Indicates a successful call. - '401': - description: Authorization information is missing or invalid. - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_4xx_response' - get: - summary: Get a case comment or alert - operationId: getCaseCommentDefaultSpace - description: > - You must have `read` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the cases with the - comments you're seeking. - tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_case_id' - - $ref: '#/components/parameters/Cases_comment_id' - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - oneOf: - - $ref: >- - #/components/schemas/Cases_alert_comment_response_properties - - $ref: >- - #/components/schemas/Cases_user_comment_response_properties - examples: - getCaseCommentResponse: - $ref: '#/components/examples/Cases_get_comment_response' - '401': - description: Authorization information is missing or invalid. - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}/connector/{connectorId}/_push: - post: - summary: Push a case to an external service + patch: + summary: Update cases + operationId: updateCaseDefaultSpace description: > - You must have `all` privileges for the **Actions and Connectors** - feature in the **Management** section of the Kibana feature privileges. - You must also have `all` privileges for the **Cases** feature in the - **Management**, **Observability**, or **Security** section of the Kibana - feature privileges, depending on the owner of the case you're pushing. - operationId: pushCaseDefaultSpace + You must have `all` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the + Kibana feature privileges, depending on the owner of the case you're + updating. tags: - cases parameters: - - $ref: '#/components/parameters/Cases_case_id' - - $ref: '#/components/parameters/Cases_connector_id' - $ref: '#/components/parameters/Cases_kbn_xsrf' requestBody: content: application/json: schema: - type: object - nullable: true - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_case_response_properties' - examples: - pushCaseResponse: - $ref: '#/components/examples/Cases_push_case_response' - '401': - description: Authorization information is missing or invalid. - content: - application/json: - schema: - $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}/user_actions: - get: - summary: Get case activity - description: > - Returns all user activity for a case. Deprecated in 8.1.0. This API is - deprecated and will be removed in a future release; use the find user - actions API instead. You must have `read` privileges for the **Cases** - feature in the **Management**, **Observability**, or **Security** - section of the Kibana feature privileges, depending on the owner of the - case you're seeking. - deprecated: true - operationId: getCaseActivityDefaultSpace - tags: - - cases - parameters: - - $ref: '#/components/parameters/Cases_case_id' + $ref: '#/components/schemas/Cases_update_case_request' + examples: + updateCaseRequest: + $ref: '#/components/examples/Cases_update_case_request' responses: '200': description: Indicates a successful call. @@ -1506,30 +2152,43 @@ paths: schema: type: array items: - $ref: '#/components/schemas/Cases_user_actions_response_properties' + $ref: '#/components/schemas/Cases_case_response_properties' + examples: + updateCaseResponse: + $ref: '#/components/examples/Cases_update_case_response' '401': description: Authorization information is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/{caseId}/user_actions/_find: + /api/cases/_find: get: - summary: Find case activity + summary: Search cases + operationId: findCasesDefaultSpace description: > - Retrives a paginated list of user activity for a case. You must have - `read` privileges for the **Cases** feature in the **Management**, - **Observability**, or **Security** section of the Kibana feature - privileges, depending on the owner of the case you're seeking. - operationId: findCaseActivityDefaultSpace + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the cases you're seeking. tags: - cases parameters: - - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_assignees' + - $ref: '#/components/parameters/Cases_category' + - $ref: '#/components/parameters/Cases_defaultSearchOperator' + - $ref: '#/components/parameters/Cases_from' + - $ref: '#/components/parameters/Cases_owner' - $ref: '#/components/parameters/Cases_page_index' - $ref: '#/components/parameters/Cases_page_size' + - $ref: '#/components/parameters/Cases_reporters' + - $ref: '#/components/parameters/Cases_search' + - $ref: '#/components/parameters/Cases_searchFields' + - $ref: '#/components/parameters/Cases_severity' + - $ref: '#/components/parameters/Cases_sortField' - $ref: '#/components/parameters/Cases_sort_order' - - $ref: '#/components/parameters/Cases_user_action_types' + - $ref: '#/components/parameters/Cases_status' + - $ref: '#/components/parameters/Cases_tags' + - $ref: '#/components/parameters/Cases_to' responses: '200': description: Indicates a successful call. @@ -1538,37 +2197,46 @@ paths: schema: type: object properties: + cases: + type: array + maxItems: 10000 + items: + $ref: '#/components/schemas/Cases_case_response_properties' + count_closed_cases: + type: integer + count_in_progress_cases: + type: integer + count_open_cases: + type: integer page: type: integer - perPage: + per_page: type: integer total: type: integer - userActions: - type: array - maxItems: 10000 - items: - $ref: >- - #/components/schemas/Cases_user_actions_find_response_properties examples: - findCaseActivityResponse: - $ref: '#/components/examples/Cases_find_case_activity_response' + findCaseResponse: + $ref: '#/components/examples/Cases_find_case_response' '401': description: Authorization information is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Cases_4xx_response' - /api/cases/configure/connectors/_find: + /api/cases/alerts/{alertId}: get: - summary: Get case connectors - operationId: findCaseConnectorsDefaultSpace + summary: Get cases for an alert + operationId: getCasesByAlertDefaultSpace description: > - Get information about connectors that are supported for use in cases. - You must have `read` privileges for the **Actions and Connectors** - feature in the **Management** section of the Kibana feature privileges. + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the cases you're seeking. + x-technical-preview: true tags: - cases + parameters: + - $ref: '#/components/parameters/Cases_alert_id' + - $ref: '#/components/parameters/Cases_owner' responses: '200': description: Indicates a successful call. @@ -1576,245 +2244,431 @@ paths: application/json: schema: type: array + maxItems: 10000 items: type: object properties: - actionTypeId: - $ref: '#/components/schemas/Cases_connector_types' - config: - type: object - properties: - apiUrl: - type: string - projectKey: - type: string - additionalProperties: true id: type: string - isDeprecated: - type: boolean - isMissingSecrets: - type: boolean - isPreconfigured: - type: boolean - name: + description: The case identifier. + title: type: string - referencedByCount: - type: integer - maxItems: 1000 - examples: - findConnectorResponse: - $ref: '#/components/examples/Cases_find_connector_response' + description: The case title. + example: + - id: 06116b80-e1c3-11ec-be9b-9b1838238ee6 + title: security_case '401': description: Authorization information is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Cases_4xx_response' - /api/actions/connector: - post: - summary: Create a connector with a random ID - operationId: createConnector - description: The connector identifier is randomly generated. + /api/cases/configure: + get: + summary: Get case settings + operationId: getCaseConfigurationDefaultSpace + description: > + Get setting details such as the closure type, custom fields, templatse, + and the default connector for cases. You must have `read` privileges for + the **Cases** feature in the **Management**, **Observability**, or + **Security** section of the Kibana feature privileges, depending on + where the cases were created. tags: - - connectors + - cases parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Connectors_create_connector_request' - examples: - createEmailConnectorRequest: - $ref: >- - #/components/examples/Connectors_create_email_connector_request - createIndexConnectorRequest: - $ref: >- - #/components/examples/Connectors_create_index_connector_request - createWebhookConnectorRequest: - $ref: >- - #/components/examples/Connectors_create_webhook_connector_request - createXmattersConnectorRequest: - $ref: >- - #/components/examples/Connectors_create_xmatters_connector_request + - $ref: '#/components/parameters/Cases_owner' responses: '200': description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/Connectors_connector_response_properties' + type: array + items: + type: object + properties: + closure_type: + $ref: '#/components/schemas/Cases_closure_types' + connector: + type: object + properties: + fields: + description: >- + The fields specified in the case configuration are + not used and are not propagated to individual cases, + therefore it is recommended to set it to `null`. + nullable: true + type: object + id: + description: >- + The identifier for the connector. If you do not want + a default connector, use `none`. To retrieve + connector IDs, use the find connectors API. + type: string + example: none + name: + description: >- + The name of the connector. If you do not want a + default connector, use `none`. To retrieve connector + names, use the find connectors API. + type: string + example: none + type: + $ref: '#/components/schemas/Cases_connector_types' + created_at: + type: string + format: date-time + example: '2022-06-01T17:07:17.767Z' + created_by: + type: object + required: + - email + - full_name + - username + properties: + email: + type: string + example: null + nullable: true + full_name: + type: string + example: null + nullable: true + username: + type: string + example: elastic + nullable: true + profile_uid: + type: string + example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 + customFields: + type: array + description: Custom fields configuration details. + items: + type: object + properties: + defaultValue: + oneOf: + - type: string + - type: boolean + description: > + A default value for the custom field. If the + `type` is `text`, the default value must be a + string. If the `type` is `toggle`, the default + value must be boolean. + key: + description: > + A unique key for the custom field. Must be lower + case and composed only of a-z, 0-9, '_', and '-' + characters. It is used in API calls to refer to a + specific custom field. + type: string + minLength: 1 + maxLength: 36 + label: + description: >- + The custom field label that is displayed in the + case. + type: string + minLength: 1 + maxLength: 50 + required: + description: > + Indicates whether the field is required. If + `false`, the custom field can be set to null or + omitted when a case is created or updated. + type: boolean + type: + description: The type of the custom field. + type: string + enum: + - text + - toggle + error: + type: string + nullable: true + example: null + id: + type: string + example: 4a97a440-e1cd-11ec-be9b-9b1838238ee6 + mappings: + type: array + items: + type: object + properties: + action_type: + type: string + example: overwrite + source: + type: string + example: title + target: + type: string + example: summary + owner: + $ref: '#/components/schemas/Cases_owners' + templates: + $ref: '#/components/schemas/Cases_templates' + updated_at: + type: string + format: date-time + nullable: true + example: '2022-06-01T19:58:48.169Z' + updated_by: + type: object + required: + - email + - full_name + - username + properties: + email: + type: string + example: null + nullable: true + full_name: + type: string + example: null + nullable: true + username: + type: string + example: elastic + nullable: true + profile_uid: + type: string + example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 + nullable: true + version: + type: string + example: WzIwNzMsMV0= examples: - createEmailConnectorResponse: - $ref: >- - #/components/examples/Connectors_create_email_connector_response - createIndexConnectorResponse: - $ref: >- - #/components/examples/Connectors_create_index_connector_response - createWebhookConnectorResponse: - $ref: >- - #/components/examples/Connectors_create_webhook_connector_response - createXmattersConnectorResponse: - $ref: >- - #/components/examples/Connectors_create_xmatters_connector_response + getConfigurationResponse: + $ref: '#/components/examples/Cases_get_case_configuration_response' '401': - $ref: '#/components/responses/Connectors_401' - /api/actions/connector/{connectorId}: - get: - summary: Get a connector information - operationId: getConnector + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + post: + summary: Add case settings + operationId: setCaseConfigurationDefaultSpace + description: > + Case settings include external connection details, custom fields, and + templates. Connectors are used to interface with external systems. You + must create a connector before you can use it in your cases. If you set + a default connector, it is automatically selected when you create cases + in Kibana. If you use the create case API, however, you must still + specify all of the connector details. You must have `all` privileges for + the **Cases** feature in the **Management**, **Observability**, or + **Security** section of the Kibana feature privileges, depending on + where you are creating cases. tags: - - connectors + - cases parameters: - - $ref: '#/components/parameters/Connectors_connector_id' + - $ref: '#/components/parameters/Cases_kbn_xsrf' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_set_case_configuration_request' + examples: + setCaseConfigRequest: + $ref: '#/components/examples/Cases_set_case_configuration_request' responses: '200': description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/Connectors_connector_response_properties' - examples: - getConnectorResponse: - $ref: '#/components/examples/Connectors_get_connector_response' - '401': - $ref: '#/components/responses/Connectors_401' - '404': - $ref: '#/components/responses/Connectors_404' - delete: - summary: Delete a connector - operationId: deleteConnector - tags: - - connectors - parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - - $ref: '#/components/parameters/Connectors_connector_id' - responses: - '204': - description: Indicates a successful call. - '401': - $ref: '#/components/responses/Connectors_401' - '404': - $ref: '#/components/responses/Connectors_404' - post: - summary: Create a connector - operationId: createConnectorId - tags: - - connectors - parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - - in: path - name: connectorId - description: > - A UUID v1 or v4 identifier for the connector. If you omit this - parameter, an identifier is randomly generated. - required: true - schema: - type: string - example: ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Connectors_create_connector_request' - examples: - createIndexConnectorRequest: - $ref: >- - #/components/examples/Connectors_create_index_connector_request - responses: - '200': - description: Indicates a successful call. + type: object + properties: + closure_type: + $ref: '#/components/schemas/Cases_closure_types' + connector: + type: object + properties: + fields: + description: >- + The fields specified in the case configuration are not + used and are not propagated to individual cases, + therefore it is recommended to set it to `null`. + nullable: true + type: object + id: + description: >- + The identifier for the connector. If you do not want a + default connector, use `none`. To retrieve connector + IDs, use the find connectors API. + type: string + example: none + name: + description: >- + The name of the connector. If you do not want a + default connector, use `none`. To retrieve connector + names, use the find connectors API. + type: string + example: none + type: + $ref: '#/components/schemas/Cases_connector_types' + created_at: + type: string + format: date-time + example: '2022-06-01T17:07:17.767Z' + created_by: + type: object + required: + - email + - full_name + - username + properties: + email: + type: string + example: null + nullable: true + full_name: + type: string + example: null + nullable: true + username: + type: string + example: elastic + nullable: true + profile_uid: + type: string + example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 + customFields: + type: array + description: Custom fields configuration details. + items: + type: object + properties: + defaultValue: + oneOf: + - type: string + - type: boolean + description: > + A default value for the custom field. If the `type` + is `text`, the default value must be a string. If + the `type` is `toggle`, the default value must be + boolean. + key: + description: > + A unique key for the custom field. Must be lower + case and composed only of a-z, 0-9, '_', and '-' + characters. It is used in API calls to refer to a + specific custom field. + type: string + minLength: 1 + maxLength: 36 + label: + description: >- + The custom field label that is displayed in the + case. + type: string + minLength: 1 + maxLength: 50 + required: + description: > + Indicates whether the field is required. If `false`, + the custom field can be set to null or omitted when + a case is created or updated. + type: boolean + type: + description: The type of the custom field. + type: string + enum: + - text + - toggle + error: + type: string + nullable: true + example: null + id: + type: string + example: 4a97a440-e1cd-11ec-be9b-9b1838238ee6 + mappings: + type: array + items: + type: object + properties: + action_type: + type: string + example: overwrite + source: + type: string + example: title + target: + type: string + example: summary + owner: + $ref: '#/components/schemas/Cases_owners' + templates: + $ref: '#/components/schemas/Cases_templates' + updated_at: + type: string + format: date-time + nullable: true + example: '2022-06-01T19:58:48.169Z' + updated_by: + type: object + required: + - email + - full_name + - username + properties: + email: + type: string + example: null + nullable: true + full_name: + type: string + example: null + nullable: true + username: + type: string + example: elastic + nullable: true + profile_uid: + type: string + example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 + nullable: true + version: + type: string + example: WzIwNzMsMV0= + examples: + setCaseConfigResponse: + $ref: '#/components/examples/Cases_set_case_configuration_response' + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Connectors_connector_response_properties' - examples: - createIndexConnectorResponse: - $ref: >- - #/components/examples/Connectors_create_index_connector_response - '401': - $ref: '#/components/responses/Connectors_401' - put: - summary: Update a connector - operationId: updateConnector + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/configure/{configurationId}: + patch: + summary: Update case settings + operationId: updateCaseConfigurationDefaultSpace + description: > + Updates setting details such as the closure type, custom fields, + templates, and the default connector for cases. Connectors are used to + interface with external systems. You must create a connector before you + can use it in your cases. You must have `all` privileges for the + **Cases** feature in the **Management**, **Observability**, or + **Security** section of the Kibana feature privileges, depending on + where the case was created. tags: - - connectors + - cases parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - - $ref: '#/components/parameters/Connectors_connector_id' + - $ref: '#/components/parameters/Cases_kbn_xsrf' + - $ref: '#/components/parameters/Cases_configuration_id' requestBody: - required: true content: application/json: schema: - $ref: '#/components/schemas/Connectors_update_connector_request' + $ref: '#/components/schemas/Cases_update_case_configuration_request' examples: - updateIndexConnectorRequest: - $ref: >- - #/components/examples/Connectors_update_index_connector_request - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - $ref: '#/components/schemas/Connectors_connector_response_properties' - '400': - $ref: '#/components/responses/Connectors_401' - '401': - $ref: '#/components/responses/Connectors_401' - '404': - $ref: '#/components/responses/Connectors_404' - /api/actions/connector/{connectorId}/_execute: - post: - summary: Run a connector - operationId: runConnector - description: > - You can use this API to test an action that involves interaction with - Kibana services or integrations with third-party systems. You must have - `read` privileges for the **Actions and Connectors** feature in the - **Management** section of the Kibana feature privileges. If you use an - index connector, you must also have `all`, `create`, `index`, or `write` - indices privileges. - tags: - - connectors - parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - - $ref: '#/components/parameters/Connectors_connector_id' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Connectors_run_connector_request' - examples: - runCasesWebhookConnectorRequest: - $ref: >- - #/components/examples/Connectors_run_cases_webhook_connector_request - runEmailConnectorRequest: - $ref: '#/components/examples/Connectors_run_email_connector_request' - runIndexConnectorRequest: - $ref: '#/components/examples/Connectors_run_index_connector_request' - runJiraConnectorRequest: - $ref: '#/components/examples/Connectors_run_jira_connector_request' - runPagerDutyConnectorRequest: - $ref: >- - #/components/examples/Connectors_run_pagerduty_connector_request - runServerLogConnectorRequest: - $ref: >- - #/components/examples/Connectors_run_server_log_connector_request - runServiceNowITOMConnectorRequest: - $ref: >- - #/components/examples/Connectors_run_servicenow_itom_connector_request - runSlackConnectorRequest: - $ref: >- - #/components/examples/Connectors_run_slack_api_connector_request - runSwimlaneConnectorRequest: - $ref: >- - #/components/examples/Connectors_run_swimlane_connector_request + updateCaseConfigurationRequest: + $ref: '#/components/examples/Cases_update_case_configuration_request' responses: '200': description: Indicates a successful call. @@ -1822,63 +2676,187 @@ paths: application/json: schema: type: object - required: - - connector_id - - status properties: - connector_id: + closure_type: + $ref: '#/components/schemas/Cases_closure_types' + connector: + type: object + properties: + fields: + description: >- + The fields specified in the case configuration are not + used and are not propagated to individual cases, + therefore it is recommended to set it to `null`. + nullable: true + type: object + id: + description: >- + The identifier for the connector. If you do not want a + default connector, use `none`. To retrieve connector + IDs, use the find connectors API. + type: string + example: none + name: + description: >- + The name of the connector. If you do not want a + default connector, use `none`. To retrieve connector + names, use the find connectors API. + type: string + example: none + type: + $ref: '#/components/schemas/Cases_connector_types' + created_at: type: string - description: The identifier for the connector. - data: - oneOf: - - type: object - description: Information returned from the action. - additionalProperties: true - - type: array - description: An array of information returned from the action. - items: - type: object - status: + format: date-time + example: '2022-06-01T17:07:17.767Z' + created_by: + type: object + required: + - email + - full_name + - username + properties: + email: + type: string + example: null + nullable: true + full_name: + type: string + example: null + nullable: true + username: + type: string + example: elastic + nullable: true + profile_uid: + type: string + example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 + customFields: + type: array + description: Custom fields configuration details. + items: + type: object + properties: + defaultValue: + oneOf: + - type: string + - type: boolean + description: > + A default value for the custom field. If the `type` + is `text`, the default value must be a string. If + the `type` is `toggle`, the default value must be + boolean. + key: + description: > + A unique key for the custom field. Must be lower + case and composed only of a-z, 0-9, '_', and '-' + characters. It is used in API calls to refer to a + specific custom field. + type: string + minLength: 1 + maxLength: 36 + label: + description: >- + The custom field label that is displayed in the + case. + type: string + minLength: 1 + maxLength: 50 + required: + description: > + Indicates whether the field is required. If `false`, + the custom field can be set to null or omitted when + a case is created or updated. + type: boolean + type: + description: The type of the custom field. + type: string + enum: + - text + - toggle + error: type: string - description: The status of the action. - enum: - - error - - ok + nullable: true + example: null + id: + type: string + example: 4a97a440-e1cd-11ec-be9b-9b1838238ee6 + mappings: + type: array + items: + type: object + properties: + action_type: + type: string + example: overwrite + source: + type: string + example: title + target: + type: string + example: summary + owner: + $ref: '#/components/schemas/Cases_owners' + templates: + $ref: '#/components/schemas/Cases_templates' + updated_at: + type: string + format: date-time + nullable: true + example: '2022-06-01T19:58:48.169Z' + updated_by: + type: object + required: + - email + - full_name + - username + properties: + email: + type: string + example: null + nullable: true + full_name: + type: string + example: null + nullable: true + username: + type: string + example: elastic + nullable: true + profile_uid: + type: string + example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 + nullable: true + version: + type: string + example: WzIwNzMsMV0= examples: - runCasesWebhookConnectorResponse: - $ref: >- - #/components/examples/Connectors_run_cases_webhook_connector_response - runEmailConnectorResponse: - $ref: >- - #/components/examples/Connectors_run_email_connector_response - runIndexConnectorResponse: - $ref: >- - #/components/examples/Connectors_run_index_connector_response - runJiraConnectorResponse: - $ref: '#/components/examples/Connectors_run_jira_connector_response' - runPagerDutyConnectorResponse: - $ref: >- - #/components/examples/Connectors_run_pagerduty_connector_response - runServerLogConnectorResponse: - $ref: >- - #/components/examples/Connectors_run_server_log_connector_response - runServiceNowITOMConnectorResponse: - $ref: >- - #/components/examples/Connectors_run_servicenow_itom_connector_response - runSlackConnectorResponse: - $ref: >- - #/components/examples/Connectors_run_slack_api_connector_response - runSwimlaneConnectorResponse: + updateCaseConfigurationResponse: $ref: >- - #/components/examples/Connectors_run_swimlane_connector_response + #/components/examples/Cases_update_case_configuration_response '401': - $ref: '#/components/responses/Connectors_401' - /api/actions/connectors: + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/reporters: get: - summary: Get all connectors - operationId: getConnectors + summary: Get case creators + operationId: getCaseReportersDefaultSpace + description: > + Returns information about the users who opened cases. You must have read + privileges for the **Cases** feature in the **Management**, + **Observability**, or **Security** section of the Kibana feature + privileges, depending on the owner of the cases. The API returns + information about the users as they existed at the time of the case + creation, including their name, full name, and email address. If any of + those details change thereafter or if a user is deleted, the information + returned by this API is unchanged. tags: - - connectors + - cases + parameters: + - $ref: '#/components/parameters/Cases_owner' responses: '200': description: Indicates a successful call. @@ -1886,163 +2864,150 @@ paths: application/json: schema: type: array - items: - $ref: >- - #/components/schemas/Connectors_connector_response_properties - examples: - getConnectorsResponse: - $ref: '#/components/examples/Connectors_get_connectors_response' - '401': - $ref: '#/components/responses/Connectors_401' - /api/actions/connector_types: - get: - summary: Get all connector types - operationId: getConnectorTypes - tags: - - connectors - parameters: - - in: query - name: feature_id - description: >- - A filter to limit the retrieved connector types to those that - support a specific feature (such as alerting or cases). - schema: - $ref: '#/components/schemas/Connectors_features' - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - title: Get connector types response body properties - description: The properties vary for each connector type. - type: array + maxItems: 10000 items: type: object + required: + - email + - full_name + - username properties: - enabled: - type: boolean - description: >- - Indicates whether the connector type is enabled in - Kibana. - example: true - enabled_in_config: - type: boolean - description: >- - Indicates whether the connector type is enabled in the - Kibana configuration file. - example: true - enabled_in_license: - type: boolean - description: >- - Indicates whether the connector is enabled in the - license. - example: true - id: - $ref: '#/components/schemas/Connectors_connector_types' - is_system_action_type: - type: boolean - example: false - minimum_license_required: + email: type: string - description: The license that is required to use the connector type. - example: basic - name: + example: null + nullable: true + full_name: type: string - description: The name of the connector type. - example: Index - supported_feature_ids: - type: array - description: The features that are supported by the connector type. - items: - $ref: '#/components/schemas/Connectors_features' - example: - - alerting - - cases - - siem + example: null + nullable: true + username: + type: string + example: elastic + nullable: true + profile_uid: + type: string + example: u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0 examples: - getConnectorTypesServerlessResponse: - $ref: >- - #/components/examples/Connectors_get_connector_types_generativeai_response + getReportersResponse: + $ref: '#/components/examples/Cases_get_reporters_response' '401': - $ref: '#/components/responses/Connectors_401' - /api/actions/action/{actionId}: - delete: - summary: Delete a connector - operationId: legacyDeleteConnector - deprecated: true + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/status: + get: + summary: Get case status summary + operationId: getCaseStatusDefaultSpace description: > - Deprecated in 7.13.0. Use the delete connector API instead. WARNING: - When you delete a connector, it cannot be recovered. + Returns the number of cases that are open, closed, and in progress. + Deprecated in 8.1.0. This API is deprecated and will be removed in a + future release; use the find cases API instead. You must have `read` + privileges for the **Cases** feature in the **Management**, + **Observability**, or **Security** section of the Kibana feature + privileges, depending on the owner of the cases you're seeking. + deprecated: true tags: - - connectors + - cases parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - - $ref: '#/components/parameters/Connectors_action_id' + - $ref: '#/components/parameters/Cases_owner' responses: - '204': + '200': description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + count_closed_cases: + type: integer + count_in_progress_cases: + type: integer + count_open_cases: + type: integer '401': - $ref: '#/components/responses/Connectors_401' + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/tags: get: - summary: Get connector information - operationId: legacyGetConnector - description: Deprecated in 7.13.0. Use the get connector API instead. - deprecated: true + summary: Get case tags + operationId: getCaseTagsDefaultSpace + description: > + Aggregates and returns a list of case tags. You must have read + privileges for the **Cases** feature in the **Management**, + **Observability**, or **Security** section of the Kibana feature + privileges, depending on the owner of the cases you're seeking. tags: - - connectors + - cases parameters: - - $ref: '#/components/parameters/Connectors_action_id' + - $ref: '#/components/parameters/Cases_owner' responses: '200': - $ref: '#/components/responses/Connectors_200_actions' + description: Indicates a successful call. + content: + application/json: + schema: + type: array + maxItems: 10000 + items: + type: string + examples: + getTagsResponse: + $ref: '#/components/examples/Cases_get_tags_response' '401': - $ref: '#/components/responses/Connectors_401' - put: - summary: Update a connector - operationId: legacyUpdateConnector - deprecated: true - description: Deprecated in 7.13.0. Use the update connector API instead. + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}: + get: + summary: Get case information + operationId: getCaseDefaultSpace + description: > + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're seeking. tags: - - connectors + - cases parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - - $ref: '#/components/parameters/Connectors_action_id' - requestBody: - required: true - content: - application/json: - schema: - title: Legacy update connector request body properties - description: The properties vary depending on the connector type. - type: object - properties: - config: - type: object - description: >- - The new connector configuration. Configuration properties - vary depending on the connector type. - name: - type: string - description: The new name for the connector. - secrets: - type: object - description: >- - The updated secrets configuration for the connector. Secrets - properties vary depending on the connector type. + - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_includeComments' responses: '200': - $ref: '#/components/responses/Connectors_200_actions' - '404': - $ref: '#/components/responses/Connectors_404' - /api/actions: + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_case_response_properties' + examples: + getDefaultCaseResponse: + $ref: '#/components/examples/Cases_get_case_response' + getDefaultObservabilityCaseReponse: + $ref: '#/components/examples/Cases_get_case_observability_response' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}/alerts: get: - summary: Get all connectors - operationId: legacyGetConnectors - deprecated: true - description: Deprecated in 7.13.0. Use the get all connectors API instead. + summary: Get all alerts for a case + description: > + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the cases you're seeking. + x-technical-preview: true + operationId: getCaseAlertsDefaultSpace tags: - - connectors + - cases + parameters: + - $ref: '#/components/parameters/Cases_case_id' responses: '200': description: Indicates a successful call. @@ -2051,434 +3016,315 @@ paths: schema: type: array items: - $ref: '#/components/schemas/Connectors_action_response_properties' + $ref: '#/components/schemas/Cases_alert_response_properties' + examples: + getCaseAlertsResponse: + $ref: '#/components/examples/Cases_get_case_alerts_response' '401': - $ref: '#/components/responses/Connectors_401' + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}/comments: post: - summary: Create a connector - operationId: legacyCreateConnector - deprecated: true - description: Deprecated in 7.13.0. Use the create connector API instead. + summary: Add a case comment or alert + operationId: addCaseCommentDefaultSpace + description: > + You must have `all` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're creating. + NOTE: Each case can have a maximum of 1,000 alerts. tags: - - connectors + - cases parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - $ref: '#/components/parameters/Cases_kbn_xsrf' + - $ref: '#/components/parameters/Cases_case_id' requestBody: required: true content: application/json: schema: - title: Legacy create connector request properties - type: object - properties: - actionTypeId: - type: string - description: The connector type identifier. - config: - type: object - description: >- - The configuration for the connector. Configuration - properties vary depending on the connector type. - name: - type: string - description: The display name for the connector. - secrets: - type: object - description: > - The secrets configuration for the connector. Secrets - configuration properties vary depending on the connector - type. NOTE: Remember these values. You must provide them - each time you update the connector. - responses: - '200': - $ref: '#/components/responses/Connectors_200_actions' - '401': - $ref: '#/components/responses/Connectors_401' - /api/actions/list_action_types: - get: - summary: Get connector types - operationId: legacyGetConnectorTypes - deprecated: true - description: Deprecated in 7.13.0. Use the get all connector types API instead. - tags: - - connectors + $ref: '#/components/schemas/Cases_add_case_comment_request' + examples: + createCaseCommentRequest: + $ref: '#/components/examples/Cases_add_comment_request' responses: '200': description: Indicates a successful call. content: application/json: schema: - title: Legacy get connector types response body properties - description: The properties vary for each connector type. - type: array - items: - type: object - properties: - enabled: - type: boolean - description: >- - Indicates whether the connector type is enabled in - Kibana. - enabledInConfig: - type: boolean - description: >- - Indicates whether the connector type is enabled in the - Kibana `.yml` file. - enabledInLicense: - type: boolean - description: >- - Indicates whether the connector is enabled in the - license. - example: true - id: - type: string - description: The unique identifier for the connector type. - minimumLicenseRequired: - type: string - description: The license that is required to use the connector type. - name: - type: string - description: The name of the connector type. + $ref: '#/components/schemas/Cases_case_response_properties' + examples: + createCaseCommentResponse: + $ref: '#/components/examples/Cases_add_comment_response' '401': - $ref: '#/components/responses/Connectors_401' - /api/actions/action/{actionId}/_execute: - post: - summary: Run a connector - operationId: legacyRunConnector - deprecated: true - description: Deprecated in 7.13.0. Use the run connector API instead. - tags: - - connectors - parameters: - - $ref: '#/components/parameters/Connectors_kbn_xsrf' - - $ref: '#/components/parameters/Connectors_action_id' - requestBody: - required: true - content: - application/json: - schema: - title: Legacy run connector request body properties - description: The properties vary depending on the connector type. - type: object - required: - - params - properties: - params: - type: object - description: >- - The parameters of the connector. Parameter properties vary - depending on the connector type. - responses: - '200': - description: Indicates a successful call. + description: Authorization information is missing or invalid. content: application/json: schema: - type: object - properties: - actionId: - type: string - data: - oneOf: - - type: object - description: Information returned from the action. - additionalProperties: true - - type: array - description: An array of information returned from the action. - items: - type: object - status: - type: string - description: The status of the action. - '401': - $ref: '#/components/responses/Connectors_401' - /api/data_views: - get: - summary: Get all data views - operationId: getAllDataViewsDefault + $ref: '#/components/schemas/Cases_4xx_response' + delete: + summary: Delete all case comments and alerts + operationId: deleteCaseCommentsDefaultSpace + description: > + Deletes all comments and alerts from a case. You must have `all` + privileges for the **Cases** feature in the **Management**, + **Observability**, or **Security** section of the Kibana feature + privileges, depending on the owner of the cases you're deleting. tags: - - data views + - cases + parameters: + - $ref: '#/components/parameters/Cases_kbn_xsrf' + - $ref: '#/components/parameters/Cases_case_id' responses: - '200': + '204': description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - type: object - properties: - data_view: - type: array - items: - type: object - properties: - id: - type: string - name: - type: string - namespaces: - type: array - items: - type: string - title: - type: string - typeMeta: - type: object - examples: - getAllDataViewsResponse: - $ref: '#/components/examples/Data_views_get_data_views_response' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Data_views_400_response' - /api/data_views/data_view: - post: - summary: Create a data view - operationId: createDataViewDefaultw + $ref: '#/components/schemas/Cases_4xx_response' + patch: + summary: Update a case comment or alert + operationId: updateCaseCommentDefaultSpace + description: > + You must have `all` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're updating. + NOTE: You cannot change the comment type or the owner of a comment. tags: - - data views + - cases parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Cases_kbn_xsrf' + - $ref: '#/components/parameters/Cases_case_id' requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/Data_views_create_data_view_request_object' + $ref: '#/components/schemas/Cases_update_case_comment_request' examples: - createDataViewRequest: - $ref: '#/components/examples/Data_views_create_data_view_request' + updateCaseCommentRequest: + $ref: '#/components/examples/Cases_update_comment_request' responses: '200': description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/Data_views_data_view_response_object' - '400': - description: Bad request + $ref: '#/components/schemas/Cases_case_response_properties' + examples: + updateCaseCommentResponse: + $ref: '#/components/examples/Cases_update_comment_response' + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Data_views_400_response' - /api/data_views/data_view/{viewId}: + $ref: '#/components/schemas/Cases_4xx_response' get: - summary: Get a data view - operationId: getDataViewDefault + summary: Get all case comments + operationId: getAllCaseCommentsDefaultSpace + description: > + Deprecated in 8.1.0. This API is deprecated and will be removed in a + future release; instead, use the get case comment API, which requires a + comment identifier in the path. You must have `read` privileges for the + **Cases** feature in the **Management**, **Observability**, or + **Security** section of the Kibana feature privileges, depending on the + owner of the cases with the comments you're seeking. + deprecated: true tags: - - data views + - cases parameters: - - $ref: '#/components/parameters/Data_views_view_id' + - $ref: '#/components/parameters/Cases_case_id' responses: '200': description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/Data_views_data_view_response_object' - examples: - getDataViewResponse: - $ref: '#/components/examples/Data_views_get_data_view_response' - '404': - description: Object is not found. + $ref: '#/components/schemas/Cases_case_response_properties' + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Data_views_404_response' - delete: - summary: Delete a data view - operationId: deleteDataViewDefault - description: | - WARNING: When you delete a data view, it cannot be recovered. - tags: - - data views + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}/comments/_find: + get: + summary: Find case comments and alerts + operationId: findCaseCommentsDefaultSpace + description: > + Retrieves a paginated list of comments for a case. You must have `read` + privileges for the **Cases** feature in the **Management**, + **Observability**, or **Security** section of the Kibana feature + privileges, depending on the owner of the cases with the comments you're + seeking. + tags: + - cases parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' - - $ref: '#/components/parameters/Data_views_view_id' + - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_page_index' + - $ref: '#/components/parameters/Cases_page_size' + - $ref: '#/components/parameters/Cases_sort_order' responses: - '204': + '200': description: Indicates a successful call. - '404': - description: Object is not found. content: application/json: schema: - $ref: '#/components/schemas/Data_views_404_response' - post: - summary: Update a data view - operationId: updateDataViewDefault + $ref: '#/components/schemas/Cases_case_response_properties' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}/comments/{commentId}: + delete: + summary: Delete a case comment or alert + operationId: deleteCaseCommentDefaultSpace + description: > + You must have `all` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the cases you're deleting. tags: - - data views + - cases parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' - - $ref: '#/components/parameters/Data_views_view_id' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Data_views_update_data_view_request_object' - examples: - updateDataViewRequest: - $ref: '#/components/examples/Data_views_update_data_view_request' + - $ref: '#/components/parameters/Cases_kbn_xsrf' + - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_comment_id' responses: - '200': + '204': description: Indicates a successful call. + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Data_views_data_view_response_object' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Data_views_400_response' - /api/data_views/data_view/{viewId}/fields: - post: - summary: Update data view fields metadata - operationId: updateFieldsMetadataDefault + $ref: '#/components/schemas/Cases_4xx_response' + get: + summary: Get a case comment or alert + operationId: getCaseCommentDefaultSpace description: > - Update fields presentation metadata such as count, customLabel, - customDescription, and format. + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the cases with the + comments you're seeking. tags: - - data views + - cases parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' - - $ref: '#/components/parameters/Data_views_view_id' - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - fields - properties: - fields: - description: The field object. - type: object - examples: - updateFieldsMetadataRequest: - $ref: '#/components/examples/Data_views_update_field_metadata_request' + - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_comment_id' responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - properties: - acknowledged: - type: boolean - '400': - description: Bad request + oneOf: + - $ref: >- + #/components/schemas/Cases_alert_comment_response_properties + - $ref: >- + #/components/schemas/Cases_user_comment_response_properties + examples: + getCaseCommentResponse: + $ref: '#/components/examples/Cases_get_comment_response' + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Data_views_400_response' - /api/data_views/data_view/{viewId}/runtime_field: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}/connector/{connectorId}/_push: post: - summary: Create a runtime field - operationId: createRuntimeFieldDefault + summary: Push a case to an external service + description: > + You must have `all` privileges for the **Actions and Connectors** + feature in the **Management** section of the Kibana feature privileges. + You must also have `all` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're pushing. + operationId: pushCaseDefaultSpace tags: - - data views + - cases parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' - - $ref: '#/components/parameters/Data_views_view_id' + - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_connector_id' + - $ref: '#/components/parameters/Cases_kbn_xsrf' requestBody: - required: true content: application/json: schema: type: object - required: - - name - - runtimeField - properties: - name: - type: string - description: | - The name for a runtime field. - runtimeField: - type: object - description: | - The runtime field definition object. - examples: - createRuntimeFieldRequest: - $ref: '#/components/examples/Data_views_create_runtime_field_request' + nullable: true responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - put: - summary: Create or update a runtime field - operationId: createUpdateRuntimeFieldDefault + $ref: '#/components/schemas/Cases_case_response_properties' + examples: + pushCaseResponse: + $ref: '#/components/examples/Cases_push_case_response' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}/user_actions: + get: + summary: Get case activity + description: > + Returns all user activity for a case. Deprecated in 8.1.0. This API is + deprecated and will be removed in a future release; use the find user + actions API instead. You must have `read` privileges for the **Cases** + feature in the **Management**, **Observability**, or **Security** + section of the Kibana feature privileges, depending on the owner of the + case you're seeking. + deprecated: true + operationId: getCaseActivityDefaultSpace tags: - - data views + - cases parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' - - name: viewId - in: path - description: | - The ID of the data view fields you want to update. - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - name - - runtimeField - properties: - name: - type: string - description: | - The name for a runtime field. - runtimeField: - type: object - description: | - The runtime field definition object. - examples: - updateRuntimeFieldRequest: - $ref: '#/components/examples/Data_views_create_runtime_field_request' + - $ref: '#/components/parameters/Cases_case_id' responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - properties: - data_view: - type: object - fields: - type: array - items: - type: object - '400': - description: Bad request + type: array + items: + $ref: '#/components/schemas/Cases_user_actions_response_properties' + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Data_views_400_response' - /api/data_views/data_view/{viewId}/runtime_field/{fieldName}: + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/{caseId}/user_actions/_find: get: - summary: Get a runtime field - operationId: getRuntimeFieldDefault + summary: Find case activity + description: > + Retrives a paginated list of user activity for a case. You must have + `read` privileges for the **Cases** feature in the **Management**, + **Observability**, or **Security** section of the Kibana feature + privileges, depending on the owner of the case you're seeking. + operationId: findCaseActivityDefaultSpace tags: - - data views + - cases parameters: - - $ref: '#/components/parameters/Data_views_field_name' - - $ref: '#/components/parameters/Data_views_view_id' + - $ref: '#/components/parameters/Cases_case_id' + - $ref: '#/components/parameters/Cases_page_index' + - $ref: '#/components/parameters/Cases_page_size' + - $ref: '#/components/parameters/Cases_sort_order' + - $ref: '#/components/parameters/Cases_user_action_types' responses: '200': description: Indicates a successful call. @@ -2487,216 +3333,283 @@ paths: schema: type: object properties: - data_view: - type: object - fields: + page: + type: integer + perPage: + type: integer + total: + type: integer + userActions: type: array + maxItems: 10000 items: - type: object + $ref: >- + #/components/schemas/Cases_user_actions_find_response_properties examples: - getRuntimeFieldResponse: - $ref: '#/components/examples/Data_views_get_runtime_field_response' - '404': - description: Object is not found. + findCaseActivityResponse: + $ref: '#/components/examples/Cases_find_case_activity_response' + '401': + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/Data_views_404_response' - delete: - summary: Delete a runtime field from a data view - operationId: deleteRuntimeFieldDefault + $ref: '#/components/schemas/Cases_4xx_response' + /api/cases/configure/connectors/_find: + get: + summary: Get case connectors + operationId: findCaseConnectorsDefaultSpace + description: > + Get information about connectors that are supported for use in cases. + You must have `read` privileges for the **Actions and Connectors** + feature in the **Management** section of the Kibana feature privileges. tags: - - data views - parameters: - - $ref: '#/components/parameters/Data_views_field_name' - - $ref: '#/components/parameters/Data_views_view_id' + - cases responses: '200': description: Indicates a successful call. - '404': - description: Object is not found. content: application/json: schema: - $ref: '#/components/schemas/Data_views_404_response' + type: array + items: + type: object + properties: + actionTypeId: + $ref: '#/components/schemas/Cases_connector_types' + config: + type: object + properties: + apiUrl: + type: string + projectKey: + type: string + additionalProperties: true + id: + type: string + isDeprecated: + type: boolean + isMissingSecrets: + type: boolean + isPreconfigured: + type: boolean + name: + type: string + referencedByCount: + type: integer + maxItems: 1000 + examples: + findConnectorResponse: + $ref: '#/components/examples/Cases_find_connector_response' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/Cases_4xx_response' + /api/actions/connector: post: - summary: Update a runtime field - operationId: updateRuntimeFieldDefault + summary: Create a connector with a random ID + operationId: createConnector + description: The connector identifier is randomly generated. tags: - - data views + - connectors parameters: - - $ref: '#/components/parameters/Data_views_field_name' - - $ref: '#/components/parameters/Data_views_view_id' + - $ref: '#/components/parameters/Connectors_kbn_xsrf' requestBody: required: true content: application/json: schema: - type: object - required: - - runtimeField - properties: - runtimeField: - type: object - description: | - The runtime field definition object. - - You can update following fields: - - - `type` - - `script` + $ref: '#/components/schemas/Connectors_create_connector_request' examples: - updateRuntimeFieldRequest: - $ref: '#/components/examples/Data_views_update_runtime_field_request' + createEmailConnectorRequest: + $ref: >- + #/components/examples/Connectors_create_email_connector_request + createIndexConnectorRequest: + $ref: >- + #/components/examples/Connectors_create_index_connector_request + createWebhookConnectorRequest: + $ref: >- + #/components/examples/Connectors_create_webhook_connector_request + createXmattersConnectorRequest: + $ref: >- + #/components/examples/Connectors_create_xmatters_connector_request responses: '200': description: Indicates a successful call. - '400': - description: Bad request content: application/json: schema: - $ref: '#/components/schemas/Data_views_400_response' - /api/data_views/default: + $ref: '#/components/schemas/Connectors_connector_response_properties' + examples: + createEmailConnectorResponse: + $ref: >- + #/components/examples/Connectors_create_email_connector_response + createIndexConnectorResponse: + $ref: >- + #/components/examples/Connectors_create_index_connector_response + createWebhookConnectorResponse: + $ref: >- + #/components/examples/Connectors_create_webhook_connector_response + createXmattersConnectorResponse: + $ref: >- + #/components/examples/Connectors_create_xmatters_connector_response + '401': + $ref: '#/components/responses/Connectors_401' + /api/actions/connector/{connectorId}: get: - summary: Get the default data view - operationId: getDefaultDataViewDefault + summary: Get a connector information + operationId: getConnector tags: - - data views + - connectors + parameters: + - $ref: '#/components/parameters/Connectors_connector_id' responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - properties: - data_view_id: - type: string + $ref: '#/components/schemas/Connectors_connector_response_properties' examples: - getDefaultDataViewResponse: - $ref: >- - #/components/examples/Data_views_get_default_data_view_response - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Data_views_400_response' + getConnectorResponse: + $ref: '#/components/examples/Connectors_get_connector_response' + '401': + $ref: '#/components/responses/Connectors_401' + '404': + $ref: '#/components/responses/Connectors_404' + delete: + summary: Delete a connector + operationId: deleteConnector + tags: + - connectors + parameters: + - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_connector_id' + responses: + '204': + description: Indicates a successful call. + '401': + $ref: '#/components/responses/Connectors_401' + '404': + $ref: '#/components/responses/Connectors_404' post: - summary: Set the default data view - operationId: setDefaultDatailViewDefault + summary: Create a connector + operationId: createConnectorId tags: - - data views + - connectors parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - in: path + name: connectorId + description: > + A UUID v1 or v4 identifier for the connector. If you omit this + parameter, an identifier is randomly generated. + required: true + schema: + type: string + example: ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 requestBody: required: true content: application/json: schema: - type: object - required: - - data_view_id - properties: - data_view_id: - type: string - nullable: true - description: > - The data view identifier. NOTE: The API does not validate - whether it is a valid identifier. Use `null` to unset the - default data view. - force: - type: boolean - description: Update an existing default data view identifier. - default: false + $ref: '#/components/schemas/Connectors_create_connector_request' examples: - setDefaultDataViewRequest: - $ref: '#/components/examples/Data_views_set_default_data_view_request' + createIndexConnectorRequest: + $ref: >- + #/components/examples/Connectors_create_index_connector_request responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - properties: - acknowledged: - type: boolean - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Data_views_400_response' - /api/data_views/swap_references: - post: - summary: Swap saved object references - operationId: swapDataViewsDefault - description: > - Changes saved object references from one data view identifier to - another. WARNING: Misuse can break large numbers of saved objects! - Practicing with a backup is recommended. + $ref: '#/components/schemas/Connectors_connector_response_properties' + examples: + createIndexConnectorResponse: + $ref: >- + #/components/examples/Connectors_create_index_connector_response + '401': + $ref: '#/components/responses/Connectors_401' + put: + summary: Update a connector + operationId: updateConnector tags: - - data views + - connectors parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_connector_id' requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/Data_views_swap_data_view_request_object' + $ref: '#/components/schemas/Connectors_update_connector_request' examples: - swapDataViewRequest: - $ref: '#/components/examples/Data_views_swap_data_view_request' - responses: - '200': + updateIndexConnectorRequest: + $ref: >- + #/components/examples/Connectors_update_index_connector_request + responses: + '200': description: Indicates a successful call. content: application/json: schema: - type: object - properties: - deleteStatus: - type: object - properties: - deletePerformed: - type: boolean - remainingRefs: - type: integer - result: - type: array - items: - type: object - properties: - id: - type: string - description: A saved object identifier. - type: - type: string - description: The saved object type. - /api/data_views/swap_references/_preview: + $ref: '#/components/schemas/Connectors_connector_response_properties' + '400': + $ref: '#/components/responses/Connectors_401' + '401': + $ref: '#/components/responses/Connectors_401' + '404': + $ref: '#/components/responses/Connectors_404' + /api/actions/connector/{connectorId}/_execute: post: - summary: Preview a saved object reference swap - operationId: previewSwapDataViewsDefault + summary: Run a connector + operationId: runConnector description: > - Preview the impact of swapping saved object references from one data - view identifier to another. + You can use this API to test an action that involves interaction with + Kibana services or integrations with third-party systems. You must have + `read` privileges for the **Actions and Connectors** feature in the + **Management** section of the Kibana feature privileges. If you use an + index connector, you must also have `all`, `create`, `index`, or `write` + indices privileges. tags: - - data views + - connectors parameters: - - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_connector_id' requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/Data_views_swap_data_view_request_object' + $ref: '#/components/schemas/Connectors_run_connector_request' examples: - previewSwapDataViewRequest: + runCasesWebhookConnectorRequest: $ref: >- - #/components/examples/Data_views_preview_swap_data_view_request + #/components/examples/Connectors_run_cases_webhook_connector_request + runEmailConnectorRequest: + $ref: '#/components/examples/Connectors_run_email_connector_request' + runIndexConnectorRequest: + $ref: '#/components/examples/Connectors_run_index_connector_request' + runJiraConnectorRequest: + $ref: '#/components/examples/Connectors_run_jira_connector_request' + runPagerDutyConnectorRequest: + $ref: >- + #/components/examples/Connectors_run_pagerduty_connector_request + runServerLogConnectorRequest: + $ref: >- + #/components/examples/Connectors_run_server_log_connector_request + runServiceNowITOMConnectorRequest: + $ref: >- + #/components/examples/Connectors_run_servicenow_itom_connector_request + runSlackConnectorRequest: + $ref: >- + #/components/examples/Connectors_run_slack_api_connector_request + runSwimlaneConnectorRequest: + $ref: >- + #/components/examples/Connectors_run_swimlane_connector_request responses: '200': description: Indicates a successful call. @@ -2704,632 +3617,546 @@ paths: application/json: schema: type: object + required: + - connector_id + - status properties: - result: - type: array - items: - type: object - properties: - id: - type: string - description: A saved object identifier. - type: - type: string - description: The saved object type. - /api/ml/saved_objects/sync: + connector_id: + type: string + description: The identifier for the connector. + data: + oneOf: + - type: object + description: Information returned from the action. + additionalProperties: true + - type: array + description: An array of information returned from the action. + items: + type: object + status: + type: string + description: The status of the action. + enum: + - error + - ok + examples: + runCasesWebhookConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_cases_webhook_connector_response + runEmailConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_email_connector_response + runIndexConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_index_connector_response + runJiraConnectorResponse: + $ref: '#/components/examples/Connectors_run_jira_connector_response' + runPagerDutyConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_pagerduty_connector_response + runServerLogConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_server_log_connector_response + runServiceNowITOMConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_servicenow_itom_connector_response + runSlackConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_slack_api_connector_response + runSwimlaneConnectorResponse: + $ref: >- + #/components/examples/Connectors_run_swimlane_connector_response + '401': + $ref: '#/components/responses/Connectors_401' + /api/actions/connectors: get: - summary: Sync saved objects in the default space - description: > - Synchronizes Kibana saved objects for machine learning jobs and trained - models in the default space. You must have `all` privileges for the - **Machine Learning** feature in the **Analytics** section of the Kibana - feature privileges. This API runs automatically when you start Kibana - and periodically thereafter. - operationId: mlSync + summary: Get all connectors + operationId: getConnectors tags: - - ml - parameters: - - $ref: '#/components/parameters/Machine_learning_APIs_simulateParam' + - connectors responses: '200': - description: Indicates a successful call + description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/Machine_learning_APIs_mlSync200Response' + type: array + items: + $ref: >- + #/components/schemas/Connectors_connector_response_properties examples: - syncExample: - $ref: '#/components/examples/Machine_learning_APIs_mlSyncExample' + getConnectorsResponse: + $ref: '#/components/examples/Connectors_get_connectors_response' '401': - description: Authorization information is missing or invalid. - content: - application/json: - schema: - $ref: '#/components/schemas/Machine_learning_APIs_mlSync4xxResponse' - /api/encrypted_saved_objects/_rotate_key: - post: - summary: Rotate a key for encrypted saved objects - operationId: rotateEncryptionKey - description: > - Superuser role required. - - - If a saved object cannot be decrypted using the primary encryption key, - then Kibana will attempt to decrypt it using the specified - decryption-only keys. In most of the cases this overhead is negligible, - but if you're dealing with a large number of saved objects and - experiencing performance issues, you may want to rotate the encryption - key. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. + $ref: '#/components/responses/Connectors_401' + /api/actions/connector_types: + get: + summary: Get all connector types + operationId: getConnectorTypes tags: - - saved objects + - connectors parameters: - in: query - name: batch_size - schema: - type: number - default: 10000 - required: false - description: > - Specifies a maximum number of saved objects that Kibana can process - in a single batch. Bulk key rotation is an iterative process since - Kibana may not be able to fetch and process all required saved - objects in one go and splits processing into consequent batches. By - default, the batch size is 10000, which is also a maximum allowed - value. - - in: query - name: type + name: feature_id + description: >- + A filter to limit the retrieved connector types to those that + support a specific feature (such as alerting or cases). schema: - type: string - required: false - description: > - Limits encryption key rotation only to the saved objects with the - specified type. By default, Kibana tries to rotate the encryption - key for all saved object types that may contain encrypted - attributes. + $ref: '#/components/schemas/Connectors_features' responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - properties: - total: - type: number - description: > - Indicates the total number of all encrypted saved objects - (optionally filtered by the requested `type`), regardless - of the key Kibana used for encryption. - successful: - type: number - description: > - Indicates the total number of all encrypted saved objects - (optionally filtered by the requested `type`), regardless - of the key Kibana used for encryption. - - - NOTE: In most cases, `total` will be greater than - `successful` even if `failed` is zero. The reason is that - Kibana may not need or may not be able to rotate - encryption keys for all encrypted saved objects. - failed: - type: number - description: > - Indicates the number of the saved objects that were still - encrypted with one of the old encryption keys that Kibana - failed to re-encrypt with the primary key. - examples: - rotateEncryptionKeyResponse: - $ref: '#/components/examples/Saved_objects_key_rotation_response' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - '429': - description: Already in progress. - content: - application/json: - schema: - type: object - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_bulk_create: - post: - summary: Create saved objects - operationId: bulkCreateSavedObjects + title: Get connector types response body properties + description: The properties vary for each connector type. + type: array + items: + type: object + properties: + enabled: + type: boolean + description: >- + Indicates whether the connector type is enabled in + Kibana. + example: true + enabled_in_config: + type: boolean + description: >- + Indicates whether the connector type is enabled in the + Kibana configuration file. + example: true + enabled_in_license: + type: boolean + description: >- + Indicates whether the connector is enabled in the + license. + example: true + id: + $ref: '#/components/schemas/Connectors_connector_types' + is_system_action_type: + type: boolean + example: false + minimum_license_required: + type: string + description: The license that is required to use the connector type. + example: basic + name: + type: string + description: The name of the connector type. + example: Index + supported_feature_ids: + type: array + description: The features that are supported by the connector type. + items: + $ref: '#/components/schemas/Connectors_features' + example: + - alerting + - cases + - siem + examples: + getConnectorTypesServerlessResponse: + $ref: >- + #/components/examples/Connectors_get_connector_types_generativeai_response + '401': + $ref: '#/components/responses/Connectors_401' + /api/actions/action/{actionId}: + delete: + summary: Delete a connector + operationId: legacyDeleteConnector deprecated: true + description: > + Deprecated in 7.13.0. Use the delete connector API instead. WARNING: + When you delete a connector, it cannot be recovered. tags: - - saved objects + - connectors parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - in: query - name: overwrite - description: When true, overwrites the document with the same identifier. - schema: - type: boolean - requestBody: - required: true - content: - application/json: - schema: - type: array - items: - type: object + - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_action_id' responses: - '200': + '204': description: Indicates a successful call. - content: - application/json: - schema: - type: object - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_bulk_delete: - post: - summary: Delete saved objects - operationId: bulkDeleteSavedObjects - description: | - WARNING: When you delete a saved object, it cannot be recovered. + '401': + $ref: '#/components/responses/Connectors_401' + get: + summary: Get connector information + operationId: legacyGetConnector + description: Deprecated in 7.13.0. Use the get connector API instead. deprecated: true tags: - - saved objects + - connectors parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - in: query - name: force - description: > - When true, force delete objects that exist in multiple namespaces. - Note that the option applies to the whole request. Use the delete - object API to specify per-object deletion behavior. TIP: Use this if - you attempted to delete objects and received an HTTP 400 error with - the following message: "Unable to delete saved object that exists in - multiple namespaces, use the force option to delete it anyway". - WARNING: When you bulk delete objects that exist in multiple - namespaces, the API also deletes legacy url aliases that reference - the object. These requests are batched to minimise the impact but - they can place a heavy load on Kibana. Make sure you limit the - number of objects that exist in multiple namespaces in a single bulk - delete operation. - schema: - type: boolean - requestBody: - required: true - content: - application/json: - schema: - type: array - items: - type: object + - $ref: '#/components/parameters/Connectors_action_id' responses: '200': - description: > - Indicates a successful call. NOTE: This HTTP response code indicates - that the bulk operation succeeded. Errors pertaining to individual - objects will be returned in the response body. - content: - application/json: - schema: - type: object - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_bulk_get: - post: - summary: Get saved objects - operationId: bulkGetSavedObjects + $ref: '#/components/responses/Connectors_200_actions' + '401': + $ref: '#/components/responses/Connectors_401' + put: + summary: Update a connector + operationId: legacyUpdateConnector deprecated: true + description: Deprecated in 7.13.0. Use the update connector API instead. tags: - - saved objects + - connectors parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_action_id' requestBody: required: true content: application/json: schema: - type: array - items: - type: object + title: Legacy update connector request body properties + description: The properties vary depending on the connector type. + type: object + properties: + config: + type: object + description: >- + The new connector configuration. Configuration properties + vary depending on the connector type. + name: + type: string + description: The new name for the connector. + secrets: + type: object + description: >- + The updated secrets configuration for the connector. Secrets + properties vary depending on the connector type. + responses: + '200': + $ref: '#/components/responses/Connectors_200_actions' + '404': + $ref: '#/components/responses/Connectors_404' + /api/actions: + get: + summary: Get all connectors + operationId: legacyGetConnectors + deprecated: true + description: Deprecated in 7.13.0. Use the get all connectors API instead. + tags: + - connectors responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_bulk_resolve: + type: array + items: + $ref: '#/components/schemas/Connectors_action_response_properties' + '401': + $ref: '#/components/responses/Connectors_401' post: - summary: Resolve saved objects - operationId: bulkResolveSavedObjects + summary: Create a connector + operationId: legacyCreateConnector deprecated: true - description: > - Retrieve multiple Kibana saved objects by identifier using any legacy - URL aliases if they exist. Under certain circumstances when Kibana is - upgraded, saved object migrations may necessitate regenerating some - object IDs to enable new features. When an object's ID is regenerated, a - legacy URL alias is created for that object, preserving its old ID. In - such a scenario, that object can be retrieved by the bulk resolve API - using either its new ID or its old ID. + description: Deprecated in 7.13.0. Use the create connector API instead. tags: - - saved objects + - connectors parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_kbn_xsrf' requestBody: required: true content: application/json: schema: - type: array - items: - type: object - responses: - '200': - description: > - Indicates a successful call. NOTE: This HTTP response code indicates - that the bulk operation succeeded. Errors pertaining to individual - objects will be returned in the response body. - content: - application/json: - schema: - type: object - '400': - description: Bad request - content: + title: Legacy create connector request properties + type: object + properties: + actionTypeId: + type: string + description: The connector type identifier. + config: + type: object + description: >- + The configuration for the connector. Configuration + properties vary depending on the connector type. + name: + type: string + description: The display name for the connector. + secrets: + type: object + description: > + The secrets configuration for the connector. Secrets + configuration properties vary depending on the connector + type. NOTE: Remember these values. You must provide them + each time you update the connector. + responses: + '200': + $ref: '#/components/responses/Connectors_200_actions' + '401': + $ref: '#/components/responses/Connectors_401' + /api/actions/list_action_types: + get: + summary: Get connector types + operationId: legacyGetConnectorTypes + deprecated: true + description: Deprecated in 7.13.0. Use the get all connector types API instead. + tags: + - connectors + responses: + '200': + description: Indicates a successful call. + content: application/json: schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_bulk_update: + title: Legacy get connector types response body properties + description: The properties vary for each connector type. + type: array + items: + type: object + properties: + enabled: + type: boolean + description: >- + Indicates whether the connector type is enabled in + Kibana. + enabledInConfig: + type: boolean + description: >- + Indicates whether the connector type is enabled in the + Kibana `.yml` file. + enabledInLicense: + type: boolean + description: >- + Indicates whether the connector is enabled in the + license. + example: true + id: + type: string + description: The unique identifier for the connector type. + minimumLicenseRequired: + type: string + description: The license that is required to use the connector type. + name: + type: string + description: The name of the connector type. + '401': + $ref: '#/components/responses/Connectors_401' + /api/actions/action/{actionId}/_execute: post: - summary: Update saved objects - operationId: bulkUpdateSavedObjects - description: Update the attributes for multiple Kibana saved objects. + summary: Run a connector + operationId: legacyRunConnector deprecated: true + description: Deprecated in 7.13.0. Use the run connector API instead. tags: - - saved objects + - connectors parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_kbn_xsrf' + - $ref: '#/components/parameters/Connectors_action_id' requestBody: required: true content: application/json: schema: - type: array - items: + title: Legacy run connector request body properties + description: The properties vary depending on the connector type. + type: object + required: + - params + properties: + params: + type: object + description: >- + The parameters of the connector. Parameter properties vary + depending on the connector type. + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: type: object + properties: + actionId: + type: string + data: + oneOf: + - type: object + description: Information returned from the action. + additionalProperties: true + - type: array + description: An array of information returned from the action. + items: + type: object + status: + type: string + description: The status of the action. + '401': + $ref: '#/components/responses/Connectors_401' + /api/data_views: + get: + summary: Get all data views + operationId: getAllDataViewsDefault + tags: + - data views responses: '200': - description: > - Indicates a successful call. NOTE: This HTTP response code indicates - that the bulk operation succeeded. Errors pertaining to individual - objects will be returned in the response body. + description: Indicates a successful call. content: application/json: schema: type: object + properties: + data_view: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + namespaces: + type: array + items: + type: string + title: + type: string + typeMeta: + type: object + examples: + getAllDataViewsResponse: + $ref: '#/components/examples/Data_views_get_data_views_response' '400': description: Bad request content: application/json: schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_export: + $ref: '#/components/schemas/Data_views_400_response' + /api/data_views/data_view: post: - summary: Export saved objects in the default space - operationId: exportSavedObjectsDefault - description: > - Retrieve sets of saved objects that you want to import into Kibana. - - You must include `type` or `objects` in the request body. - - - NOTE: The `savedObjects.maxImportExportSize` configuration setting - limits the number of saved objects which may be exported. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. + summary: Create a data view + operationId: createDataViewDefaultw tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Data_views_kbn_xsrf' requestBody: required: true content: application/json: schema: - type: object - properties: - excludeExportDetails: - description: Do not add export details entry at the end of the stream. - type: boolean - default: false - includeReferencesDeep: - description: >- - Includes all of the referenced objects in the exported - objects. - type: boolean - objects: - description: A list of objects to export. - type: array - items: - type: object - type: - description: >- - The saved object types to include in the export. Use `*` to - export all the types. - oneOf: - - type: string - - type: array - items: - type: string + $ref: '#/components/schemas/Data_views_create_data_view_request_object' examples: - exportSavedObjectsRequest: - $ref: '#/components/examples/Saved_objects_export_objects_request' + createDataViewRequest: + $ref: '#/components/examples/Data_views_create_data_view_request' responses: '200': description: Indicates a successful call. content: - application/x-ndjson: + application/json: schema: - type: object - additionalProperties: true - examples: - exportSavedObjectsResponse: - $ref: '#/components/examples/Saved_objects_export_objects_response' + $ref: '#/components/schemas/Data_views_data_view_response_object' '400': - description: Bad request. + description: Bad request content: application/json: schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_find: + $ref: '#/components/schemas/Data_views_400_response' + /api/data_views/data_view/{viewId}: get: - summary: Search for saved objects - operationId: findSavedObjects - description: Retrieve a paginated set of Kibana saved objects. - deprecated: true + summary: Get a data view + operationId: getDataViewDefault tags: - - saved objects + - data views parameters: - - in: query - name: aggs - description: > - An aggregation structure, serialized as a string. The field format - is similar to filter, meaning that to use a saved object type - attribute in the aggregation, the `savedObjectType.attributes.title: - "myTitle"` format must be used. For root fields, the syntax is - `savedObjectType.rootField`. NOTE: As objects change in Kibana, the - results on each page of the response also change. Use the find API - for traditional paginated results, but avoid using it to export - large amounts of data. - schema: - type: string - - in: query - name: default_search_operator - description: The default operator to use for the `simple_query_string`. - schema: - type: string - - in: query - name: fields - description: The fields to return in the attributes key of the response. - schema: - oneOf: - - type: string - - type: array - - in: query - name: filter - description: > - The filter is a KQL string with the caveat that if you filter with - an attribute from your saved object type, it should look like that: - `savedObjectType.attributes.title: "myTitle"`. However, if you use a - root attribute of a saved object such as `updated_at`, you will have - to define your filter like that: `savedObjectType.updated_at > - 2018-12-22`. - schema: - type: string - - in: query - name: has_no_reference - description: >- - Filters to objects that do not have a relationship with the type and - identifier combination. - schema: - type: object - - in: query - name: has_no_reference_operator - description: >- - The operator to use for the `has_no_reference` parameter. Either - `OR` or `AND`. Defaults to `OR`. - schema: - type: string - - in: query - name: has_reference - description: >- - Filters to objects that have a relationship with the type and ID - combination. - schema: - type: object - - in: query - name: has_reference_operator - description: >- - The operator to use for the `has_reference` parameter. Either `OR` - or `AND`. Defaults to `OR`. - schema: - type: string - - in: query - name: page - description: The page of objects to return. - schema: - type: integer - - in: query - name: per_page - description: The number of objects to return per page. - schema: - type: integer - - in: query - name: search - description: >- - An Elasticsearch `simple_query_string` query that filters the - objects in the response. - schema: - type: string - - in: query - name: search_fields - description: >- - The fields to perform the `simple_query_string` parsed query - against. - schema: - oneOf: - - type: string - - type: array - - in: query - name: sort_field - description: > - Sorts the response. Includes "root" and "type" fields. "root" fields - exist for all saved objects, such as "updated_at". "type" fields are - specific to an object type, such as fields returned in the - attributes key of the response. When a single type is defined in the - type parameter, the "root" and "type" fields are allowed, and - validity checks are made in that order. When multiple types are - defined in the type parameter, only "root" fields are allowed. - schema: - type: string - - in: query - name: type - description: The saved object types to include. - required: true - schema: - oneOf: - - type: string - - type: array + - $ref: '#/components/parameters/Data_views_view_id' responses: '200': description: Indicates a successful call. content: application/json: schema: - type: object + $ref: '#/components/schemas/Data_views_data_view_response_object' + examples: + getDataViewResponse: + $ref: '#/components/examples/Data_views_get_data_view_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Data_views_404_response' + delete: + summary: Delete a data view + operationId: deleteDataViewDefault + description: | + WARNING: When you delete a data view, it cannot be recovered. + tags: + - data views + parameters: + - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Data_views_view_id' + responses: + '204': + description: Indicates a successful call. + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Data_views_404_response' + post: + summary: Update a data view + operationId: updateDataViewDefault + tags: + - data views + parameters: + - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Data_views_view_id' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Data_views_update_data_view_request_object' + examples: + updateDataViewRequest: + $ref: '#/components/examples/Data_views_update_data_view_request' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '#/components/schemas/Data_views_data_view_response_object' '400': description: Bad request content: application/json: schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_import: + $ref: '#/components/schemas/Data_views_400_response' + /api/data_views/data_view/{viewId}/fields: post: - summary: Import saved objects in the default space - operationId: importSavedObjectsDefault + summary: Update data view fields metadata + operationId: updateFieldsMetadataDefault description: > - Create sets of Kibana saved objects from a file created by the export - API. - - Saved objects can be imported only into the same version, a newer minor - on the same major, or the next major. Exported saved objects are not - backwards compatible and cannot be imported into an older version of - Kibana. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. + Update fields presentation metadata such as count, customLabel, + customDescription, and format. tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - in: query - name: createNewCopies - schema: - type: boolean - required: false - description: > - Creates copies of saved objects, regenerates each object ID, and - resets the origin. When used, potential conflict errors are avoided. - NOTE: This option cannot be used with the `overwrite` and - `compatibilityMode` options. - - in: query - name: overwrite - schema: - type: boolean - required: false - description: > - Overwrites saved objects when they already exist. When used, - potential conflict errors are automatically resolved by overwriting - the destination object. NOTE: This option cannot be used with the - `createNewCopies` option. - - in: query - name: compatibilityMode - schema: - type: boolean - required: false - description: > - Applies various adjustments to the saved objects that are being - imported to maintain compatibility between different Kibana - versions. Use this option only if you encounter issues with imported - saved objects. NOTE: This option cannot be used with the - `createNewCopies` option. + - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Data_views_view_id' requestBody: required: true content: - multipart/form-data: + application/json: schema: type: object + required: + - fields properties: - file: - description: > - A file exported using the export API. NOTE: The - `savedObjects.maxImportExportSize` configuration setting - limits the number of saved objects which may be included in - this file. Similarly, the - `savedObjects.maxImportPayloadBytes` setting limits the - overall size of the file that can be imported. + fields: + description: The field object. + type: object examples: - importObjectsRequest: - $ref: '#/components/examples/Saved_objects_import_objects_request' + updateFieldsMetadataRequest: + $ref: '#/components/examples/Data_views_update_field_metadata_request' responses: '200': description: Indicates a successful call. @@ -3338,161 +4165,44 @@ paths: schema: type: object properties: - success: + acknowledged: type: boolean - description: > - Indicates when the import was successfully completed. When - set to false, some objects may not have been created. For - additional information, refer to the `errors` and - `successResults` properties. - successCount: - type: integer - description: Indicates the number of successfully imported records. - errors: - type: array - items: - type: object - description: > - Indicates the import was unsuccessful and specifies the - objects that failed to import. - - - NOTE: One object may result in multiple errors, which - requires separate steps to resolve. For instance, a - `missing_references` error and conflict error. - successResults: - type: array - items: - type: object - description: > - Indicates the objects that are successfully imported, with - any metadata if applicable. - - - NOTE: Objects are created only when all resolvable errors - are addressed, including conflicts and missing references. - If objects are created as new copies, each entry in the - `successResults` array includes a `destinationId` - attribute. - examples: - importObjectsResponse: - $ref: '#/components/examples/Saved_objects_import_objects_response' '400': - description: Bad request. + description: Bad request content: application/json: schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/_resolve_import_errors: + $ref: '#/components/schemas/Data_views_400_response' + /api/data_views/data_view/{viewId}/runtime_field: post: - summary: Resolve import errors - operationId: resolveImportErrors - description: > - To resolve errors from the Import objects API, you can: - - - * Retry certain saved objects - - * Overwrite specific saved objects - - * Change references to different saved objects - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. + summary: Create a runtime field + operationId: createRuntimeFieldDefault tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - in: query - name: compatibilityMode - schema: - type: boolean - required: false - description: > - Applies various adjustments to the saved objects that are being - imported to maintain compatibility between different Kibana - versions. When enabled during the initial import, also enable when - resolving import errors. This option cannot be used with the - `createNewCopies` option. - - in: query - name: createNewCopies - schema: - type: boolean - required: false - description: > - Creates copies of the saved objects, regenerates each object ID, and - resets the origin. When enabled during the initial import, also - enable when resolving import errors. + - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - $ref: '#/components/parameters/Data_views_view_id' requestBody: required: true content: - multipart/form-data: + application/json: schema: type: object required: - - retries + - name + - runtimeField properties: - file: - description: The same file given to the import API. + name: type: string - format: binary - retries: - description: >- - The retry operations, which can specify how to resolve - different types of errors. - type: array - items: - type: object - required: - - type - - id - properties: - type: - description: The saved object type. - type: string - id: - description: The saved object ID. - type: string - overwrite: - description: >- - When set to `true`, the source object overwrites the - conflicting destination object. When set to `false`, - does nothing. - type: boolean - destinationId: - description: >- - Specifies the destination ID that the imported object - should have, if different from the current ID. - type: string - replaceReferences: - description: >- - A list of `type`, `from`, and `to` used to change the - object references. - type: array - items: - type: object - properties: - type: - type: string - from: - type: string - to: - type: string - ignoreMissingReferences: - description: >- - When set to `true`, ignores missing reference errors. - When set to `false`, does nothing. - type: boolean + description: | + The name for a runtime field. + runtimeField: + type: object + description: | + The runtime field definition object. examples: - resolveImportErrorsRequest: - $ref: >- - #/components/examples/Saved_objects_resolve_missing_reference_request + createRuntimeFieldRequest: + $ref: '#/components/examples/Data_views_create_runtime_field_request' responses: '200': description: Indicates a successful call. @@ -3500,69 +4210,20 @@ paths: application/json: schema: type: object - properties: - success: - type: boolean - description: > - Indicates a successful import. When set to `false`, some - objects may not have been created. For additional - information, refer to the `errors` and `successResults` - properties. - successCount: - type: number - description: | - Indicates the number of successfully resolved records. - errors: - type: array - description: > - Specifies the objects that failed to resolve. - - - NOTE: One object can result in multiple errors, which - requires separate steps to resolve. For instance, a - `missing_references` error and a `conflict` error. - items: - type: object - successResults: - type: array - description: > - Indicates the objects that are successfully imported, with - any metadata if applicable. - - - NOTE: Objects are only created when all resolvable errors - are addressed, including conflict and missing references. - items: - type: object - examples: - resolveImportErrorsResponse: - $ref: >- - #/components/examples/Saved_objects_resolve_missing_reference_response - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/{type}: - post: - summary: Create a saved object - operationId: createSavedObject - description: Create a Kibana saved object with a randomly generated identifier. - deprecated: true + put: + summary: Create or update a runtime field + operationId: createUpdateRuntimeFieldDefault tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' - - in: query - name: overwrite - description: If true, overwrites the document with the same identifier. + - $ref: '#/components/parameters/Data_views_kbn_xsrf' + - name: viewId + in: path + description: | + The ID of the data view fields you want to update. + required: true schema: - type: boolean + type: string requestBody: required: true content: @@ -3570,14 +4231,20 @@ paths: schema: type: object required: - - attributes + - name + - runtimeField properties: - attributes: - $ref: '#/components/schemas/Saved_objects_attributes' - initialNamespaces: - $ref: '#/components/schemas/Saved_objects_initial_namespaces' - references: - $ref: '#/components/schemas/Saved_objects_references' + name: + type: string + description: | + The name for a runtime field. + runtimeField: + type: object + description: | + The runtime field definition object. + examples: + updateRuntimeFieldRequest: + $ref: '#/components/examples/Data_views_create_runtime_field_request' responses: '200': description: Indicates a successful call. @@ -3585,26 +4252,28 @@ paths: application/json: schema: type: object - '409': - description: Indicates a conflict error. + properties: + data_view: + type: object + fields: + type: array + items: + type: object + '400': + description: Bad request content: application/json: schema: - type: object - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/{type}/{id}: + $ref: '#/components/schemas/Data_views_400_response' + /api/data_views/data_view/{viewId}/runtime_field/{fieldName}: get: - summary: Get a saved object - operationId: getSavedObject - description: Retrieve a single Kibana saved object by identifier. - deprecated: true + summary: Get a runtime field + operationId: getRuntimeFieldDefault tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' + - $ref: '#/components/parameters/Data_views_field_name' + - $ref: '#/components/parameters/Data_views_view_id' responses: '200': description: Indicates a successful call. @@ -3612,33 +4281,47 @@ paths: application/json: schema: type: object - '400': - description: Bad request. + properties: + data_view: + type: object + fields: + type: array + items: + type: object + examples: + getRuntimeFieldResponse: + $ref: '#/components/examples/Data_views_get_runtime_field_response' + '404': + description: Object is not found. content: application/json: schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - post: - summary: Create a saved object - operationId: createSavedObjectId - description: >- - Create a Kibana saved object and specify its identifier instead of using - a randomly generated ID. - deprecated: true + $ref: '#/components/schemas/Data_views_404_response' + delete: + summary: Delete a runtime field from a data view + operationId: deleteRuntimeFieldDefault tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' - - in: query - name: overwrite - description: If true, overwrites the document with the same identifier. - schema: - type: boolean + - $ref: '#/components/parameters/Data_views_field_name' + - $ref: '#/components/parameters/Data_views_view_id' + responses: + '200': + description: Indicates a successful call. + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Data_views_404_response' + post: + summary: Update a runtime field + operationId: updateRuntimeFieldDefault + tags: + - data views + parameters: + - $ref: '#/components/parameters/Data_views_field_name' + - $ref: '#/components/parameters/Data_views_view_id' requestBody: required: true content: @@ -3646,47 +4329,85 @@ paths: schema: type: object required: - - attributes + - runtimeField properties: - attributes: - $ref: '#/components/schemas/Saved_objects_attributes' - initialNamespaces: - $ref: '#/components/schemas/Saved_objects_initial_namespaces' - references: - $ref: '#/components/schemas/Saved_objects_initial_namespaces' + runtimeField: + type: object + description: | + The runtime field definition object. + + You can update following fields: + + - `type` + - `script` + examples: + updateRuntimeFieldRequest: + $ref: '#/components/examples/Data_views_update_runtime_field_request' responses: '200': description: Indicates a successful call. + '400': + description: Bad request content: application/json: schema: - type: object - '409': - description: Indicates a conflict error. + $ref: '#/components/schemas/Data_views_400_response' + /api/data_views/default: + get: + summary: Get the default data view + operationId: getDefaultDataViewDefault + tags: + - data views + responses: + '200': + description: Indicates a successful call. content: application/json: schema: type: object - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - put: - summary: Update a saved object - operationId: updateSavedObject - description: Update the attributes for Kibana saved objects. - deprecated: true + properties: + data_view_id: + type: string + examples: + getDefaultDataViewResponse: + $ref: >- + #/components/examples/Data_views_get_default_data_view_response + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Data_views_400_response' + post: + summary: Set the default data view + operationId: setDefaultDatailViewDefault tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' + - $ref: '#/components/parameters/Data_views_kbn_xsrf' requestBody: required: true content: application/json: schema: type: object + required: + - data_view_id + properties: + data_view_id: + type: string + nullable: true + description: > + The data view identifier. NOTE: The API does not validate + whether it is a valid identifier. Use `null` to unset the + default data view. + force: + type: boolean + description: Update an existing default data view identifier. + default: false + examples: + setDefaultDataViewRequest: + $ref: '#/components/examples/Data_views_set_default_data_view_request' responses: '200': description: Indicates a successful call. @@ -3694,39 +4415,36 @@ paths: application/json: schema: type: object - '404': - description: Indicates the object was not found. - content: - application/json: - schema: - type: object - '409': - description: Indicates a conflict error. + properties: + acknowledged: + type: boolean + '400': + description: Bad request content: application/json: schema: - type: object - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /api/saved_objects/resolve/{type}/{id}: - get: - summary: Resolve a saved object - operationId: resolveSavedObject + $ref: '#/components/schemas/Data_views_400_response' + /api/data_views/swap_references: + post: + summary: Swap saved object references + operationId: swapDataViewsDefault description: > - Retrieve a single Kibana saved object by identifier using any legacy URL - alias if it exists. Under certain circumstances, when Kibana is - upgraded, saved object migrations may necessitate regenerating some - object IDs to enable new features. When an object's ID is regenerated, a - legacy URL alias is created for that object, preserving its old ID. In - such a scenario, that object can be retrieved using either its new ID or - its old ID. - deprecated: true + Changes saved object references from one data view identifier to + another. WARNING: Misuse can break large numbers of saved objects! + Practicing with a backup is recommended. tags: - - saved objects + - data views parameters: - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' + - $ref: '#/components/parameters/Data_views_kbn_xsrf' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Data_views_swap_data_view_request_object' + examples: + swapDataViewRequest: + $ref: '#/components/examples/Data_views_swap_data_view_request' responses: '200': description: Indicates a successful call. @@ -3734,901 +4452,5501 @@ paths: application/json: schema: type: object - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - security: - - Saved_objects_basicAuth: [] - - Saved_objects_apiKeyAuth: [] - /s/{spaceId}/api/observability/slos: + properties: + deleteStatus: + type: object + properties: + deletePerformed: + type: boolean + remainingRefs: + type: integer + result: + type: array + items: + type: object + properties: + id: + type: string + description: A saved object identifier. + type: + type: string + description: The saved object type. + /api/data_views/swap_references/_preview: post: - summary: Create an SLO - operationId: createSloOp + summary: Preview a saved object reference swap + operationId: previewSwapDataViewsDefault description: > - You must have `all` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + Preview the impact of swapping saved object references from one data + view identifier to another. tags: - - slo + - data views parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/Data_views_kbn_xsrf' requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/SLOs_create_slo_request' + $ref: '#/components/schemas/Data_views_swap_data_view_request_object' + examples: + previewSwapDataViewRequest: + $ref: >- + #/components/examples/Data_views_preview_swap_data_view_request responses: '200': - description: Successful request + description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/SLOs_create_slo_response' - '400': - description: Bad request + type: object + properties: + result: + type: array + items: + type: object + properties: + id: + type: string + description: A saved object identifier. + type: + type: string + description: The saved object type. + /api/ml/saved_objects/sync: + get: + summary: Sync saved objects in the default space + description: > + Synchronizes Kibana saved objects for machine learning jobs and trained + models in the default space. You must have `all` privileges for the + **Machine Learning** feature in the **Analytics** section of the Kibana + feature privileges. This API runs automatically when you start Kibana + and periodically thereafter. + operationId: mlSync + tags: + - ml + parameters: + - $ref: '#/components/parameters/Machine_learning_APIs_simulateParam' + responses: + '200': + description: Indicates a successful call content: application/json: schema: - $ref: '#/components/schemas/SLOs_400_response' + $ref: '#/components/schemas/Machine_learning_APIs_mlSync200Response' + examples: + syncExample: + $ref: '#/components/examples/Machine_learning_APIs_mlSyncExample' '401': - description: Unauthorized response + description: Authorization information is missing or invalid. content: application/json: schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_403_response' - '409': - description: Conflict - The SLO id already exists - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_409_response' - servers: - - url: https://localhost:5601 - get: - summary: Get a paginated list of SLOs - operationId: findSlosOp + $ref: '#/components/schemas/Machine_learning_APIs_mlSync4xxResponse' + /api/encrypted_saved_objects/_rotate_key: + post: + summary: Rotate a key for encrypted saved objects + operationId: rotateEncryptionKey description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + Superuser role required. + + + If a saved object cannot be decrypted using the primary encryption key, + then Kibana will attempt to decrypt it using the specified + decryption-only keys. In most of the cases this overhead is negligible, + but if you're dealing with a large number of saved objects and + experiencing performance issues, you may want to rotate the encryption + key. + + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - name: kqlQuery - in: query - description: A valid kql query to filter the SLO with - schema: - type: string - example: 'slo.name:latency* and slo.tags : "prod"' - - name: page - in: query - description: The page to use for pagination, must be greater or equal than 1 - schema: - type: integer - default: 1 - example: 1 - - name: perPage - in: query - description: Number of SLOs returned by page - schema: - type: integer - default: 25 - maximum: 5000 - example: 25 - - name: sortBy - in: query - description: Sort by field + - in: query + name: batch_size schema: - type: string - enum: - - sli_value - - status - - error_budget_consumed - - error_budget_remaining - default: status - example: status - - name: sortDirection - in: query - description: Sort order + type: number + default: 10000 + required: false + description: > + Specifies a maximum number of saved objects that Kibana can process + in a single batch. Bulk key rotation is an iterative process since + Kibana may not be able to fetch and process all required saved + objects in one go and splits processing into consequent batches. By + default, the batch size is 10000, which is also a maximum allowed + value. + - in: query + name: type schema: type: string - enum: - - asc - - desc - default: asc - example: asc - - name: hideStale - in: query - description: >- - Hide stale SLOs from the list as defined by stale SLO threshold in - SLO settings - schema: - type: boolean + required: false + description: > + Limits encryption key rotation only to the saved objects with the + specified type. By default, Kibana tries to rotate the encryption + key for all saved object types that may contain encrypted + attributes. responses: '200': - description: Successful request + description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/SLOs_find_slo_response' + type: object + properties: + total: + type: number + description: > + Indicates the total number of all encrypted saved objects + (optionally filtered by the requested `type`), regardless + of the key Kibana used for encryption. + successful: + type: number + description: > + Indicates the total number of all encrypted saved objects + (optionally filtered by the requested `type`), regardless + of the key Kibana used for encryption. + + + NOTE: In most cases, `total` will be greater than + `successful` even if `failed` is zero. The reason is that + Kibana may not need or may not be able to rotate + encryption keys for all encrypted saved objects. + failed: + type: number + description: > + Indicates the number of the saved objects that were still + encrypted with one of the old encryption keys that Kibana + failed to re-encrypt with the primary key. + examples: + rotateEncryptionKeyResponse: + $ref: '#/components/examples/Saved_objects_key_rotation_response' '400': description: Bad request content: application/json: schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_403_response' - '404': - description: Not found response + $ref: '#/components/schemas/Saved_objects_400_response' + '429': + description: Already in progress. content: application/json: schema: - $ref: '#/components/schemas/SLOs_404_response' - /s/{spaceId}/api/observability/slos/{sloId}: - get: - summary: Get an SLO - operationId: getSloOp - description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + type: object + /api/saved_objects/_bulk_create: + post: + summary: Create saved objects + operationId: bulkCreateSavedObjects + deprecated: true tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - - name: instanceId - in: query - description: the specific instanceId used by the summary calculation + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - in: query + name: overwrite + description: When true, overwrites the document with the same identifier. schema: - type: string - example: host-abcde + type: boolean + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: object responses: '200': - description: Successful request + description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/SLOs_slo_with_summary_response' + type: object '400': description: Bad request content: application/json: schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_bulk_delete: + post: + summary: Delete saved objects + operationId: bulkDeleteSavedObjects + description: | + WARNING: When you delete a saved object, it cannot be recovered. + deprecated: true + tags: + - saved objects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - in: query + name: force + description: > + When true, force delete objects that exist in multiple namespaces. + Note that the option applies to the whole request. Use the delete + object API to specify per-object deletion behavior. TIP: Use this if + you attempted to delete objects and received an HTTP 400 error with + the following message: "Unable to delete saved object that exists in + multiple namespaces, use the force option to delete it anyway". + WARNING: When you bulk delete objects that exist in multiple + namespaces, the API also deletes legacy url aliases that reference + the object. These requests are batched to minimise the impact but + they can place a heavy load on Kibana. Make sure you limit the + number of objects that exist in multiple namespaces in a single bulk + delete operation. + schema: + type: boolean + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: object + responses: + '200': + description: > + Indicates a successful call. NOTE: This HTTP response code indicates + that the bulk operation succeeded. Errors pertaining to individual + objects will be returned in the response body. content: application/json: schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response + type: object + '400': + description: Bad request content: application/json: schema: - $ref: '#/components/schemas/SLOs_403_response' - '404': - description: Not found response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_404_response' - put: - summary: Update an SLO - operationId: updateSloOp - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_bulk_get: + post: + summary: Get saved objects + operationId: bulkGetSavedObjects + deprecated: true tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/SLOs_update_slo_request' + type: array + items: + type: object responses: '200': - description: Successful request + description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/SLOs_slo_definition_response' + type: object '400': description: Bad request content: application/json: schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_403_response' - '404': - description: Not found response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_404_response' - delete: - summary: Delete an SLO - operationId: deleteSloOp + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_bulk_resolve: + post: + summary: Resolve saved objects + operationId: bulkResolveSavedObjects + deprecated: true description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + Retrieve multiple Kibana saved objects by identifier using any legacy + URL aliases if they exist. Under certain circumstances when Kibana is + upgraded, saved object migrations may necessitate regenerating some + object IDs to enable new features. When an object's ID is regenerated, a + legacy URL alias is created for that object, preserving its old ID. In + such a scenario, that object can be retrieved by the bulk resolve API + using either its new ID or its old ID. tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: object responses: - '204': - description: Successful request - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response + '200': + description: > + Indicates a successful call. NOTE: This HTTP response code indicates + that the bulk operation succeeded. Errors pertaining to individual + objects will be returned in the response body. content: application/json: schema: - $ref: '#/components/schemas/SLOs_403_response' - '404': - description: Not found response + type: object + '400': + description: Bad request content: application/json: schema: - $ref: '#/components/schemas/SLOs_404_response' - /s/{spaceId}/api/observability/slos/{sloId}/enable: + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_bulk_update: post: - summary: Enable an SLO - operationId: enableSloOp - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + summary: Update saved objects + operationId: bulkUpdateSavedObjects + description: Update the attributes for multiple Kibana saved objects. + deprecated: true tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: object responses: - '204': - description: Successful request - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response + '200': + description: > + Indicates a successful call. NOTE: This HTTP response code indicates + that the bulk operation succeeded. Errors pertaining to individual + objects will be returned in the response body. content: application/json: schema: - $ref: '#/components/schemas/SLOs_403_response' - '404': - description: Not found response + type: object + '400': + description: Bad request content: application/json: schema: - $ref: '#/components/schemas/SLOs_404_response' - /s/{spaceId}/api/observability/slos/{sloId}/disable: + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_export: post: - summary: Disable an SLO - operationId: disableSloOp + summary: Export saved objects + operationId: exportSavedObjectsDefault description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + Retrieve sets of saved objects that you want to import into Kibana. + + You must include `type` or `objects` in the request body. + + + Exported saved objects are not backwards compatible and cannot be + imported into an older version of Kibana. + + + NOTE: The `savedObjects.maxImportExportSize` configuration setting + limits the number of saved objects which may be exported. + + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + excludeExportDetails: + description: Do not add export details entry at the end of the stream. + type: boolean + default: false + includeReferencesDeep: + description: >- + Includes all of the referenced objects in the exported + objects. + type: boolean + objects: + description: A list of objects to export. + type: array + items: + type: object + type: + description: >- + The saved object types to include in the export. Use `*` to + export all the types. + oneOf: + - type: string + - type: array + items: + type: string + examples: + exportSavedObjectsRequest: + $ref: '#/components/examples/Saved_objects_export_objects_request' responses: '200': - description: Successful request - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response + description: Indicates a successful call. content: - application/json: + application/x-ndjson: schema: - $ref: '#/components/schemas/SLOs_403_response' - '404': - description: Not found response + type: object + additionalProperties: true + examples: + exportSavedObjectsResponse: + $ref: '#/components/examples/Saved_objects_export_objects_response' + '400': + description: Bad request. content: application/json: schema: - $ref: '#/components/schemas/SLOs_404_response' - /s/{spaceId}/api/observability/slos/{sloId}/_reset: - post: - summary: Reset an SLO - operationId: resetSloOp - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_find: + get: + summary: Search for saved objects + operationId: findSavedObjects + description: Retrieve a paginated set of Kibana saved objects. + deprecated: true tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' + - in: query + name: aggs + description: > + An aggregation structure, serialized as a string. The field format + is similar to filter, meaning that to use a saved object type + attribute in the aggregation, the `savedObjectType.attributes.title: + "myTitle"` format must be used. For root fields, the syntax is + `savedObjectType.rootField`. NOTE: As objects change in Kibana, the + results on each page of the response also change. Use the find API + for traditional paginated results, but avoid using it to export + large amounts of data. + schema: + type: string + - in: query + name: default_search_operator + description: The default operator to use for the `simple_query_string`. + schema: + type: string + - in: query + name: fields + description: The fields to return in the attributes key of the response. + schema: + oneOf: + - type: string + - type: array + - in: query + name: filter + description: > + The filter is a KQL string with the caveat that if you filter with + an attribute from your saved object type, it should look like that: + `savedObjectType.attributes.title: "myTitle"`. However, if you use a + root attribute of a saved object such as `updated_at`, you will have + to define your filter like that: `savedObjectType.updated_at > + 2018-12-22`. + schema: + type: string + - in: query + name: has_no_reference + description: >- + Filters to objects that do not have a relationship with the type and + identifier combination. + schema: + type: object + - in: query + name: has_no_reference_operator + description: >- + The operator to use for the `has_no_reference` parameter. Either + `OR` or `AND`. Defaults to `OR`. + schema: + type: string + - in: query + name: has_reference + description: >- + Filters to objects that have a relationship with the type and ID + combination. + schema: + type: object + - in: query + name: has_reference_operator + description: >- + The operator to use for the `has_reference` parameter. Either `OR` + or `AND`. Defaults to `OR`. + schema: + type: string + - in: query + name: page + description: The page of objects to return. + schema: + type: integer + - in: query + name: per_page + description: The number of objects to return per page. + schema: + type: integer + - in: query + name: search + description: >- + An Elasticsearch `simple_query_string` query that filters the + objects in the response. + schema: + type: string + - in: query + name: search_fields + description: >- + The fields to perform the `simple_query_string` parsed query + against. + schema: + oneOf: + - type: string + - type: array + - in: query + name: sort_field + description: > + Sorts the response. Includes "root" and "type" fields. "root" fields + exist for all saved objects, such as "updated_at". "type" fields are + specific to an object type, such as fields returned in the + attributes key of the response. When a single type is defined in the + type parameter, the "root" and "type" fields are allowed, and + validity checks are made in that order. When multiple types are + defined in the type parameter, only "root" fields are allowed. + schema: + type: string + - in: query + name: type + description: The saved object types to include. + required: true + schema: + oneOf: + - type: string + - type: array responses: - '204': - description: Successful request + '200': + description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/SLOs_slo_definition_response' + type: object '400': description: Bad request content: application/json: schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_403_response' - '404': - description: Not found response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_404_response' - /s/{spaceId}/api/observability/slos/_delete_instances: + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_import: post: - summary: Batch delete rollup and summary data - operationId: deleteSloInstancesOp + summary: Import saved objects + operationId: importSavedObjectsDefault description: > - The deletion occurs for the specified list of `sloId` and `instanceId`. - You must have `all` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. + Create sets of Kibana saved objects from a file created by the export + API. + + Saved objects can be imported only into the same version, a newer minor + on the same major, or the next major. Exported saved objects are not + backwards compatible and cannot be imported into an older version of + Kibana. + + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. tags: - - slo + - saved objects parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - in: query + name: createNewCopies + schema: + type: boolean + required: false + description: > + Creates copies of saved objects, regenerates each object ID, and + resets the origin. When used, potential conflict errors are avoided. + NOTE: This option cannot be used with the `overwrite` and + `compatibilityMode` options. + - in: query + name: overwrite + schema: + type: boolean + required: false + description: > + Overwrites saved objects when they already exist. When used, + potential conflict errors are automatically resolved by overwriting + the destination object. NOTE: This option cannot be used with the + `createNewCopies` option. + - in: query + name: compatibilityMode + schema: + type: boolean + required: false + description: > + Applies various adjustments to the saved objects that are being + imported to maintain compatibility between different Kibana + versions. Use this option only if you encounter issues with imported + saved objects. NOTE: This option cannot be used with the + `createNewCopies` option. requestBody: required: true content: - application/json: + multipart/form-data: schema: - $ref: '#/components/schemas/SLOs_delete_slo_instances_request' + type: object + properties: + file: + description: > + A file exported using the export API. NOTE: The + `savedObjects.maxImportExportSize` configuration setting + limits the number of saved objects which may be included in + this file. Similarly, the + `savedObjects.maxImportPayloadBytes` setting limits the + overall size of the file that can be imported. + examples: + importObjectsRequest: + $ref: '#/components/examples/Saved_objects_import_objects_request' responses: - '204': - description: Successful request - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_400_response' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '#/components/schemas/SLOs_401_response' - '403': - description: Unauthorized response + '200': + description: Indicates a successful call. content: application/json: schema: - $ref: '#/components/schemas/SLOs_403_response' - servers: - - url: https://localhost:5601 - /api/status: - get: - operationId: /api/status#0 - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - - description: Set to "true" to get the response in v7 format. - in: query - name: v7format - required: false + type: object + properties: + success: + type: boolean + description: > + Indicates when the import was successfully completed. When + set to false, some objects may not have been created. For + additional information, refer to the `errors` and + `successResults` properties. + successCount: + type: integer + description: Indicates the number of successfully imported records. + errors: + type: array + items: + type: object + description: > + Indicates the import was unsuccessful and specifies the + objects that failed to import. + + + NOTE: One object may result in multiple errors, which + requires separate steps to resolve. For instance, a + `missing_references` error and conflict error. + successResults: + type: array + items: + type: object + description: > + Indicates the objects that are successfully imported, with + any metadata if applicable. + + + NOTE: Objects are created only when all resolvable errors + are addressed, including conflicts and missing references. + If objects are created as new copies, each entry in the + `successResults` array includes a `destinationId` + attribute. + examples: + importObjectsResponse: + $ref: '#/components/examples/Saved_objects_import_objects_response' + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/_resolve_import_errors: + post: + summary: Resolve import errors + operationId: resolveImportErrors + description: > + To resolve errors from the Import objects API, you can: + + + * Retry certain saved objects + + * Overwrite specific saved objects + + * Change references to different saved objects + + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. + tags: + - saved objects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - in: query + name: compatibilityMode schema: type: boolean - - description: Set to "true" to get the response in v8 format. - in: query - name: v8format required: false + description: > + Applies various adjustments to the saved objects that are being + imported to maintain compatibility between different Kibana + versions. When enabled during the initial import, also enable when + resolving import errors. This option cannot be used with the + `createNewCopies` option. + - in: query + name: createNewCopies schema: type: boolean + required: false + description: > + Creates copies of the saved objects, regenerates each object ID, and + resets the origin. When enabled during the initial import, also + enable when resolving import errors. + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + required: + - retries + properties: + file: + description: The same file given to the import API. + type: string + format: binary + retries: + description: >- + The retry operations, which can specify how to resolve + different types of errors. + type: array + items: + type: object + required: + - type + - id + properties: + type: + description: The saved object type. + type: string + id: + description: The saved object ID. + type: string + overwrite: + description: >- + When set to `true`, the source object overwrites the + conflicting destination object. When set to `false`, + does nothing. + type: boolean + destinationId: + description: >- + Specifies the destination ID that the imported object + should have, if different from the current ID. + type: string + replaceReferences: + description: >- + A list of `type`, `from`, and `to` used to change the + object references. + type: array + items: + type: object + properties: + type: + type: string + from: + type: string + to: + type: string + ignoreMissingReferences: + description: >- + When set to `true`, ignores missing reference errors. + When set to `false`, does nothing. + type: boolean + examples: + resolveImportErrorsRequest: + $ref: >- + #/components/examples/Saved_objects_resolve_missing_reference_request responses: '200': + description: Indicates a successful call. content: - application/json; Elastic-Api-Version=2023-10-31: + application/json: schema: - anyOf: - - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' - - $ref: >- - #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse - description: >- - Kibana's operational status. A minimal response is sent for - unauthorized users. - description: Overall status is OK and Kibana should be functioning normally. - '503': + type: object + properties: + success: + type: boolean + description: > + Indicates a successful import. When set to `false`, some + objects may not have been created. For additional + information, refer to the `errors` and `successResults` + properties. + successCount: + type: number + description: | + Indicates the number of successfully resolved records. + errors: + type: array + description: > + Specifies the objects that failed to resolve. + + + NOTE: One object can result in multiple errors, which + requires separate steps to resolve. For instance, a + `missing_references` error and a `conflict` error. + items: + type: object + successResults: + type: array + description: > + Indicates the objects that are successfully imported, with + any metadata if applicable. + + + NOTE: Objects are only created when all resolvable errors + are addressed, including conflict and missing references. + items: + type: object + examples: + resolveImportErrorsResponse: + $ref: >- + #/components/examples/Saved_objects_resolve_missing_reference_response + '400': + description: Bad request. content: - application/json; Elastic-Api-Version=2023-10-31: + application/json: schema: - anyOf: - - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' - - $ref: >- - #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse - description: >- - Kibana's operational status. A minimal response is sent for - unauthorized users. - description: >- - Kibana or some of it's essential services are unavailable. Kibana - may be degraded or unavailable. - summary: Get Kibana's current status + $ref: '#/components/schemas/Saved_objects_400_response' + /api/saved_objects/{type}: + post: + summary: Create a saved object + operationId: createSavedObject + description: Create a Kibana saved object with a randomly generated identifier. + deprecated: true tags: - - system - security: - - Kibana_HTTP_APIs_basicAuth: [] -components: - parameters: - Cases_kbn_xsrf: - schema: - type: string - in: header - name: kbn-xsrf - description: Cross-site request forgery protection - required: true - Cases_ids: - name: ids - description: > - The cases that you want to removed. All non-ASCII characters must be URL - encoded. - in: query - required: true - schema: - type: array - items: - type: string + - saved objects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + - in: query + name: overwrite + description: If true, overwrites the document with the same identifier. + schema: + type: boolean + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - attributes + properties: + attributes: + $ref: '#/components/schemas/Saved_objects_attributes' + initialNamespaces: + $ref: '#/components/schemas/Saved_objects_initial_namespaces' + references: + $ref: '#/components/schemas/Saved_objects_references' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + '409': + description: Indicates a conflict error. + content: + application/json: + schema: + type: object + /api/saved_objects/{type}/{id}: + get: + summary: Get a saved object + operationId: getSavedObject + description: Retrieve a single Kibana saved object by identifier. + deprecated: true + tags: + - saved objects + parameters: + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/Saved_objects_400_response' + post: + summary: Create a saved object + operationId: createSavedObjectId + description: >- + Create a Kibana saved object and specify its identifier instead of using + a randomly generated ID. + deprecated: true + tags: + - saved objects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + - in: query + name: overwrite + description: If true, overwrites the document with the same identifier. + schema: + type: boolean + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - attributes + properties: + attributes: + $ref: '#/components/schemas/Saved_objects_attributes' + initialNamespaces: + $ref: '#/components/schemas/Saved_objects_initial_namespaces' + references: + $ref: '#/components/schemas/Saved_objects_initial_namespaces' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + '409': + description: Indicates a conflict error. + content: + application/json: + schema: + type: object + put: + summary: Update a saved object + operationId: updateSavedObject + description: Update the attributes for Kibana saved objects. + deprecated: true + tags: + - saved objects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + requestBody: + required: true + content: + application/json: + schema: + type: object + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + '404': + description: Indicates the object was not found. + content: + application/json: + schema: + type: object + '409': + description: Indicates a conflict error. + content: + application/json: + schema: + type: object + /api/saved_objects/resolve/{type}/{id}: + get: + summary: Resolve a saved object + operationId: resolveSavedObject + description: > + Retrieve a single Kibana saved object by identifier using any legacy URL + alias if it exists. Under certain circumstances, when Kibana is + upgraded, saved object migrations may necessitate regenerating some + object IDs to enable new features. When an object's ID is regenerated, a + legacy URL alias is created for that object, preserving its old ID. In + such a scenario, that object can be retrieved using either its new ID or + its old ID. + deprecated: true + tags: + - saved objects + parameters: + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/Saved_objects_400_response' + /s/{spaceId}/api/observability/slos: + post: + summary: Create an SLO + operationId: createSloOp + description: > + You must have `all` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_create_slo_request' + responses: + '200': + description: Successful request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_create_slo_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '409': + description: Conflict - The SLO id already exists + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_409_response' + servers: + - url: https://localhost:5601 + get: + summary: Get a paginated list of SLOs + operationId: findSlosOp + description: > + You must have the `read` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - name: kqlQuery + in: query + description: A valid kql query to filter the SLO with + schema: + type: string + example: 'slo.name:latency* and slo.tags : "prod"' + - name: page + in: query + description: The page to use for pagination, must be greater or equal than 1 + schema: + type: integer + default: 1 + example: 1 + - name: perPage + in: query + description: Number of SLOs returned by page + schema: + type: integer + default: 25 + maximum: 5000 + example: 25 + - name: sortBy + in: query + description: Sort by field + schema: + type: string + enum: + - sli_value + - status + - error_budget_consumed + - error_budget_remaining + default: status + example: status + - name: sortDirection + in: query + description: Sort order + schema: + type: string + enum: + - asc + - desc + default: asc + example: asc + - name: hideStale + in: query + description: >- + Hide stale SLOs from the list as defined by stale SLO threshold in + SLO settings + schema: + type: boolean + responses: + '200': + description: Successful request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_find_slo_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_404_response' + /s/{spaceId}/api/observability/slos/{sloId}: + get: + summary: Get an SLO + operationId: getSloOp + description: > + You must have the `read` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + - name: instanceId + in: query + description: the specific instanceId used by the summary calculation + schema: + type: string + example: host-abcde + responses: + '200': + description: Successful request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_slo_with_summary_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_404_response' + put: + summary: Update an SLO + operationId: updateSloOp + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_update_slo_request' + responses: + '200': + description: Successful request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_slo_definition_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_404_response' + delete: + summary: Delete an SLO + operationId: deleteSloOp + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + responses: + '204': + description: Successful request + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_404_response' + /s/{spaceId}/api/observability/slos/{sloId}/enable: + post: + summary: Enable an SLO + operationId: enableSloOp + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + responses: + '204': + description: Successful request + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_404_response' + /s/{spaceId}/api/observability/slos/{sloId}/disable: + post: + summary: Disable an SLO + operationId: disableSloOp + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + responses: + '200': + description: Successful request + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_404_response' + /s/{spaceId}/api/observability/slos/{sloId}/_reset: + post: + summary: Reset an SLO + operationId: resetSloOp + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + responses: + '204': + description: Successful request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_slo_definition_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_404_response' + /s/{spaceId}/api/observability/slos/_delete_instances: + post: + summary: Batch delete rollup and summary data + operationId: deleteSloInstancesOp + description: > + The deletion occurs for the specified list of `sloId` and `instanceId`. + You must have `all` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_delete_slo_instances_request' + responses: + '204': + description: Successful request + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/SLOs_403_response' + servers: + - url: https://localhost:5601 + /api/status: + get: + operationId: /api/status#0 + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: Set to "true" to get the response in v7 format. + in: query + name: v7format + required: false + schema: + type: boolean + - description: Set to "true" to get the response in v8 format. + in: query + name: v8format + required: false + schema: + type: boolean + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + anyOf: + - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' + - $ref: >- + #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse + description: >- + Kibana's operational status. A minimal response is sent for + unauthorized users. + description: Overall status is OK and Kibana should be functioning normally. + '503': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + anyOf: + - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' + - $ref: >- + #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse + description: >- + Kibana's operational status. A minimal response is sent for + unauthorized users. + description: >- + Kibana or some of it's essential services are unavailable. Kibana + may be degraded or unavailable. + summary: Get Kibana's current status + tags: + - system + security: + - Kibana_HTTP_APIs_basicAuth: [] +components: + parameters: + Alerting_kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + Alerting_rule_id: + in: path + name: ruleId + description: An identifier for the rule. + required: true + schema: + type: string + example: ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 + Alerting_alert_id: + in: path + name: alertId + description: >- + An identifier for the alert. The identifier is generated by the rule and + might be any arbitrary string. + required: true + schema: + type: string + example: ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 + Cases_kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + Cases_ids: + name: ids + description: > + The cases that you want to removed. All non-ASCII characters must be URL + encoded. + in: query + required: true + schema: + type: array + items: + type: string minItems: 1 maxItems: 100 example: d4e7abb0-b462-11ec-9a8d-698504725a43 Cases_assignees: in: query - name: assignees + name: assignees + description: > + Filters the returned cases by assignees. Valid values are `none` or + unique identifiers for the user profiles. These identifiers can be found + by using the suggest user profile API. + schema: + oneOf: + - type: string + - type: array + items: + type: string + maxItems: 100 + Cases_category: + in: query + name: category + description: Filters the returned cases by category. + schema: + oneOf: + - type: string + example: my-category + - type: array + items: + type: string + maxItems: 100 + Cases_defaultSearchOperator: + in: query + name: defaultSearchOperator + description: he default operator to use for the simple_query_string. + schema: + type: string + default: OR + example: OR + Cases_from: + in: query + name: from + description: > + Returns only cases that were created after a specific date. The date + must be specified as a KQL data range or date match expression. + schema: + type: string + example: now-1d + Cases_owner: + in: query + name: owner + description: > + A filter to limit the response to a specific set of applications. If + this parameter is omitted, the response contains information about all + the cases that the user has access to read. + schema: + oneOf: + - $ref: '#/components/schemas/Cases_owners' + - type: array + items: + $ref: '#/components/schemas/Cases_owners' + example: cases + Cases_page_index: + in: query + name: page + description: The page number to return. + required: false + schema: + type: integer + default: 1 + Cases_page_size: + in: query + name: perPage + description: The number of items to return. Limited to 100 items. + required: false + schema: + type: integer + default: 20 + maximum: 100 + Cases_reporters: + in: query + name: reporters + description: Filters the returned cases by the user name of the reporter. + schema: + oneOf: + - type: string + - type: array + items: + type: string + maxItems: 100 + example: elastic + Cases_search: + in: query + name: search + description: >- + An Elasticsearch simple_query_string query that filters the objects in + the response. + schema: + type: string + Cases_searchFields: + in: query + name: searchFields + description: The fields to perform the simple_query_string parsed query against. + schema: + oneOf: + - $ref: '#/components/schemas/Cases_searchFieldsType' + - type: array + items: + $ref: '#/components/schemas/Cases_searchFieldsType' + Cases_severity: + in: query + name: severity + description: The severity of the case. + schema: + type: string + enum: + - critical + - high + - low + - medium + Cases_sortField: + in: query + name: sortField + description: Determines which field is used to sort the results. + schema: + type: string + enum: + - createdAt + - updatedAt + - closedAt + - title + - category + - status + - severity + default: createdAt + example: updatedAt + Cases_sort_order: + in: query + name: sortOrder + description: Determines the sort order. + required: false + schema: + type: string + enum: + - asc + - desc + default: desc + Cases_status: + in: query + name: status + description: Filters the returned cases by state. + schema: + type: string + enum: + - closed + - in-progress + - open + example: open + Cases_tags: + in: query + name: tags + description: Filters the returned cases by tags. + schema: + oneOf: + - type: string + - type: array + items: + type: string + maxItems: 100 + example: tag-1 + Cases_to: + in: query + name: to + description: > + Returns only cases that were created before a specific date. The date + must be specified as a KQL data range or date match expression. + schema: + type: string + example: now+1d + Cases_alert_id: + in: path + name: alertId + description: An identifier for the alert. + required: true + schema: + type: string + example: 09f0c261e39e36351d75995b78bb83673774d1bc2cca9df2d15f0e5c0a99a540 + Cases_configuration_id: + in: path + name: configurationId + description: An identifier for the configuration. + required: true + schema: + type: string + example: 3297a0f0-b5ec-11ec-b141-0fdb20a7f9a9 + Cases_case_id: + in: path + name: caseId + description: >- + The identifier for the case. To retrieve case IDs, use the find cases + API. All non-ASCII characters must be URL encoded. + required: true + schema: + type: string + example: 9c235210-6834-11ea-a78c-6ffb38a34414 + Cases_includeComments: + in: query + name: includeComments + description: >- + Deprecated in 8.1.0. This parameter is deprecated and will be removed in + a future release. It determines whether case comments are returned. + deprecated: true + schema: + type: boolean + default: true + Cases_comment_id: + in: path + name: commentId + description: > + The identifier for the comment. To retrieve comment IDs, use the get + case or find cases APIs. + required: true + schema: + type: string + example: 71ec1870-725b-11ea-a0b2-c51ea50a58e2 + Cases_connector_id: + in: path + name: connectorId + description: >- + An identifier for the connector. To retrieve connector IDs, use the find + connectors API. + required: true + schema: + type: string + example: abed3a70-71bd-11ea-a0b2-c51ea50a58e2 + Cases_user_action_types: + in: query + name: types + description: Determines the types of user actions to return. + schema: + type: array + items: + type: string + enum: + - action + - alert + - assignees + - attachment + - comment + - connector + - create_case + - description + - pushed + - settings + - severity + - status + - tags + - title + - user + example: create_case + Connectors_kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + Connectors_connector_id: + in: path + name: connectorId + description: An identifier for the connector. + required: true + schema: + type: string + example: df770e30-8b8b-11ed-a780-3b746c987a81 + Connectors_action_id: + in: path + name: actionId + description: An identifier for the action. + required: true + schema: + type: string + example: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad + Data_views_kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + Data_views_view_id: + in: path + name: viewId + description: An identifier for the data view. + required: true + schema: + type: string + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + Data_views_field_name: + in: path + name: fieldName + description: The name of the runtime field. + required: true + schema: + type: string + example: hour_of_day + Machine_learning_APIs_simulateParam: + in: query + name: simulate + description: >- + When true, simulates the synchronization by returning only the list of + actions that would be performed. + required: false + schema: + type: boolean + example: 'true' + Saved_objects_kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + Saved_objects_saved_object_type: + in: path + name: type + description: >- + Valid options include `visualization`, `dashboard`, `search`, + `index-pattern`, `config`. + required: true + schema: + type: string + Saved_objects_saved_object_id: + in: path + name: id + description: An identifier for the saved object. + required: true + schema: + type: string + SLOs_kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + SLOs_space_id: + in: path + name: spaceId + description: >- + An identifier for the space. If `/s/` and the identifier are omitted + from the path, the default space is used. + required: true + schema: + type: string + example: default + SLOs_slo_id: + in: path + name: sloId + description: An identifier for the slo. + required: true + schema: + type: string + example: 9c235211-6834-11ea-a78c-6feb38a34414 + schemas: + Alerting_create_anomaly_detection_alert_rule_request: + title: Create anomaly detection rule request + description: > + A rule that checks if the anomaly detection job results contain + anomalies that match the rule conditions. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for an anomaly detection rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - xpack.ml.anomaly_detection_alert + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_anomaly_detection_jobs_health_rule_request: + title: Create anomaly detection jobs health rule request + description: > + An rule that monitors job health and alerts if an operational issue + occurred that may prevent the job from detecting anomalies. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for an anomaly detection jobs health rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - xpack.ml.anomaly_detection_jobs_health + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_apm_anomaly_rule_request: + title: Create APM anomaly rule rule request + description: >- + A rule that detects when either the latency, throughput, or failed + transaction rate of a service is anomalous. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_property_apm_anomaly' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - apm.anomaly + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_apm_error_count_rule_request: + title: Create APM error count rule request + description: >- + A rule that detects when the number of errors in a service exceeds a + defined threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_property_apm_error_count' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - apm.error_rate + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_apm_transaction_duration_rule_request: + title: Create latency threshold rule request + description: >- + A rule that detects when the latency of a specific transaction type in a + service exceeds a threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: >- + #/components/schemas/Alerting_params_property_apm_transaction_duration + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - apm.transaction_duration + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_apm_transaction_error_rate_rule_request: + title: Create APM transaction error rate rule request + description: >- + A rule that sends notifications when the rate of transaction errors in a + service exceeds a threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: >- + #/components/schemas/Alerting_params_property_apm_transaction_error_rate + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - apm.transaction_error_rate + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_es_query_rule_request: + title: Create Elasticsearch query rule request + description: > + A rule that runs a user-configured query, compares the number of matches + to a configured threshold, and schedules actions to run when the + threshold condition is met. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_es_query_rule' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - .es-query + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_geo_containment_rule_request: + title: Create tracking containment rule request + description: > + A rule that runs an Elasticsearch query over indices to determine + whether any documents are currently contained within any boundaries from + the specified boundary index. In the event that an entity is contained + within a boundary, an alert may be generated. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for an tracking containment rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - .geo-containment + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_index_threshold_rule_request: + title: Create index threshold rule request + description: >- + A rule that runs an Elasticsearch query, aggregates field values from + documents, compares them to threshold values, and schedules actions to + run when the thresholds are met. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_index_threshold_rule' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - .index-threshold + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_infra_inventory_rule_request: + title: Create infra inventory rule request + description: > + A rule that sends notifications when a metric has reached or exceeded a + value for a specific resource or a group of resources within your + infrastructure. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_property_infra_inventory' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - metrics.alert.inventory.threshold + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_infra_metric_anomaly_rule_request: + title: Create infrastructure anomaly rule request + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for an infrastructure anomaly rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - metrics.alert.anomaly + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_infra_metric_threshold_rule_request: + title: Create infra metric threshold rule request + description: > + A rule that sends notifications when a metric has reached or exceeded a + value for a specific time period. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_property_infra_metric_threshold' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - metrics.alert.threshold + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_jvm_memory_usage_rule_request: + title: Create JVM memory usage rule request + description: A rule that detects when a node reports high memory usage. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a JVM memory usage rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_jvm_memory_usage + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_log_threshold_rule_request: + title: Create log threshold rule request + description: A rule that detects when a log aggregation exceeds a threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_property_log_threshold' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - logs.alert.document.count + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_ccr_exceptions_rule_request: + title: Create CCR read exceptions rule request + description: A rule that detects cross-cluster replication (CCR) read exceptions. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a CCR read exceptions rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_ccr_read_exceptions + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_cluster_health_rule_request: + title: Create cluster health rule request + description: A rule that detects when the health of the cluster changes. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a cluster health rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_cluster_health + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_cpu_usage_rule_request: + title: Create CPU usage rule request + description: A rule that detects when the CPU load for a node is consistently high. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a CPU usage rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_cpu_usage + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_disk_usage_rule_request: + title: Create disk usage rule request + description: A rule that detects when the disk usage for a node is consistently high. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a disk usage rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_disk_usage + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_elasticsearch_version_mismatch_rule_request: + title: Create Elasticsearch version mismatch rule request + description: >- + A rule that detects when the cluster has multipe versions of + Elasticsearch. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a Elasticsearch version mismatch rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_elasticsearch_version_mismatch + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_license_expiration_rule_request: + title: Create license expiration rule request + description: A rule that detects when the cluster license is about to expire. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a license expiration rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_license_expiration + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_kibana_version_mismatch_rule_request: + title: Create Kibana version mismatch rule request + description: A rule that detects when the cluster has multiple versions of Kibana. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a Kibana version mismatch rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_kibana_version_mismatch + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_logstash_version_mismatch_rule_request: + title: Create Logstash version mismatch rule request + description: A rule that detects when the cluster has multiple versions of Logstash. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a Logstash version mismatch rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_logstash_version_mismatch + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_missing_data_rule_request: + title: Create missing monitoring data rule request + description: A rule that detects when monitoring data is missing. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a missing monitoring data rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_missing_monitoring_data + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_nodes_changed_rule_request: + title: Create nodes changed rule request + description: A rule that detects when nodes are added, removed, or restarted. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a nodes changed rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_nodes_changed + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_shard_size_rule_request: + title: Create shard size rule request + description: >- + A rule that detects when the average shard size is larger than a + threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a shard size rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_shard_size + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_thread_pool_search_rejections_rule_request: + title: Create thread pool search rejections rule request + description: >- + A rule that detects when the number of rejections in the thread pool + exceeds a threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a thread pool search rejections rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_thread_pool_search_rejections + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_monitoring_thread_pool_write_rejections_rule_request: + title: Create thread pool write rejections rule request + description: >- + A rule that detects when the number of rejections in the write thread + pool exceeds a threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a thread pool write rejections rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - monitoring_alert_thread_pool_write_rejections + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_eql_rule_request: + title: Create event correlation rule request + description: > + A rule that uses Event Query Language (EQL) to match events, generate + sequences, and stack data. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for an event correlation rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.eqlRule + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_indicator_rule_request: + title: Create indicator match rule request + description: > + A rule that uses indicators from intelligence sources to detect matching + events and alerts. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for an indicator match rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.indicatorRule + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_ml_rule_request: + title: Create machine learning rule request + description: > + A rule that detects when a machine learning job discovers an anomaly + above the defined threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a machine learning rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.mlRule + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_new_terms_rule_request: + title: Create new terms rule request + description: A rule that finds documents with values that appear for the first time. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a new terms rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.newTermsRule + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_notifications_rule_request: + title: Create security solution notification (legacy) rule request + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a notification rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.notifications + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_query_rule_request: + title: Create custom query rule request + description: | + A rule that uses KQL or Lucene to detect issues across indices. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a custom query rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.queryRule + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_saved_query_rule_request: + title: Create saved query rule request + description: > + A rule that searches the defined indices and creates an alert when a + document matches the saved search. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a saved query rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.savedQueryRule + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_siem_threshold_rule_request: + title: Create threshold rule request + description: > + A rule that aggregates query results to detect when the number of + matches exceeds a threshold. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a threshold rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - siem.thresholdRule + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_slo_burn_rate_rule_request: + title: Create slo burn rate rule request + description: > + A rule that detects when the burn rate is above a defined threshold for + two different lookback periods. The two periods are a long period and a + short period that is 1/12th of the long period. For each lookback + period, the burn rate is computed as the error rate divided by the error + budget. When the burn rates for both periods surpass the threshold, an + alert occurs. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_property_slo_burn_rate' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - slo.rules.burnRate + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_synthetics_monitor_status_rule_request: + title: Create synthetics monitor status rule request + description: >- + A rule that detects when a monitor is down or an availability threshold + is breached. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for the synthetics monitor status rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - xpack.synthetics.alerts.monitorStatus + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_synthetics_uptime_duration_anomaly_rule_request: + title: Create synthetics uptime duration anomaly rule request + description: > + A rule that detects response durations for all of the geographic + locations of each monitor. When a monitor runs for an unusual amount of + time, at a particular time, an anomaly is recorded. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for the uptime duration anomaly rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - xpack.uptime.alerts.durationAnomaly + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_synthetics_uptime_tls_rule_request: + title: Create synthetics uptime TLS rule request + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: '#/components/schemas/Alerting_params_property_synthetics_uptime_tls' + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - xpack.uptime.alerts.tls + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_synthetics_uptime_tls_certificate_rule_request: + title: Create TLS certificate rule request + description: > + A rule that detects when a monitor has a TLS certificate expiring or + when it exceeds an age limit. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a TLS certificate rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - xpack.uptime.alerts.tlsCertificate + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_transform_health_rule_request: + title: Create transform health rule request + description: > + A rule that monitors transforms health and alerts if an operational + issue occurred. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for a transform health rule. + additionalProperties: true + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - transform_health + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_create_uptime_monitor_status_rule_request: + title: Create uptime monitor status rule request + description: A rule that detects monitor errors and outages. + type: object + required: + - consumer + - name + - params + - rule_type_id + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + consumer: + $ref: '#/components/schemas/Alerting_consumer' + enabled: + $ref: '#/components/schemas/Alerting_enabled_rule' + name: + $ref: '#/components/schemas/Alerting_name_rule' + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + $ref: >- + #/components/schemas/Alerting_params_property_synthetics_monitor_status + rule_type_id: + type: string + description: >- + The ID of the rule type that you want to call when the rule is + scheduled to run. + enum: + - xpack.uptime.alerts.monitorStatus + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_filter: + type: object + description: >- + A filter written in Elasticsearch Query Domain Specific Language (DSL) + as defined in the `kbn-es-query` package. + properties: + meta: + type: object + properties: + alias: + type: string + nullable: true + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: + type: object + type: + type: string + value: + type: string + query: + type: object + $state: + type: object + Alerting_notify_when_action: + type: string + description: > + Indicates how often alerts generate actions. Valid values include: + `onActionGroupChange`: Actions run when the alert status changes; + `onActiveAlert`: Actions run when the alert becomes active and at each + check interval while the rule conditions are met; `onThrottleInterval`: + Actions run when the alert becomes active and at the interval specified + in the throttle property while the rule conditions are met. NOTE: You + cannot specify `notify_when` at both the rule and action level. The + recommended method is to set it for each action. If you set it at the + rule level then update the rule in Kibana, it is automatically changed + to use action-specific values. + enum: + - onActionGroupChange + - onActiveAlert + - onThrottleInterval + example: onActiveAlert + Alerting_throttle_action: + type: string + nullable: true + description: > + The throttle interval, which defines how often an alert generates + repeated actions. It is specified in seconds, minutes, hours, or days + and is applicable only if `notify_when` is set to `onThrottleInterval`. + NOTE: You cannot specify the throttle interval at both the rule and + action level. The recommended method is to set it for each action. If + you set it at the rule level then update the rule in Kibana, it is + automatically changed to use action-specific values. + default: null + example: 10m + Alerting_actions: + type: array + default: [] + nullable: true + items: + type: object + required: + - group + - id + - params + description: | + An action that runs under defined conditions. + properties: + alerts_filter: + type: object + description: > + Conditions that affect whether the action runs. If you specify + multiple conditions, all conditions must be met for the action to + run. For example, if an alert occurs within the specified time + frame and matches the query, the action runs. + properties: + query: + type: object + description: >- + Defines a query filter that determines whether the action + runs. + properties: + kql: + type: string + description: A filter written in Kibana Query Language (KQL). + filters: + type: array + items: + $ref: '#/components/schemas/Alerting_filter' + timeframe: + type: object + description: Defines a period that limits whether the action runs. + properties: + days: + type: array + description: >- + Defines the days of the week that the action can run, + represented as an array of numbers. For example, `1` + represents Monday. An empty array is equivalent to + specifying all the days of the week. + items: + type: integer + example: + - 1 + - 2 + - 3 + - 4 + - 5 + hours: + type: object + description: > + Defines the range of time in a day that the action can + run. If the `start` value is `00:00` and the `end` value + is `24:00`, actions be generated all day. + properties: + end: + type: string + description: >- + The end of the time frame in 24-hour notation + (`hh:mm`). + example: '17:00' + start: + type: string + description: >- + The start of the time frame in 24-hour notation + (`hh:mm`). + example: '08:00' + timezone: + type: string + description: > + The ISO time zone for the `hours` values. Values such as + `UTC` and `UTC+1` also work but lack built-in daylight + savings time support and are not recommended. + example: Europe/Madrid + connector_type_id: + type: string + description: >- + The type of connector. This property appears in responses but + cannot be set in requests. + example: .server-log + readOnly: true + frequency: + type: object + description: > + The properties that affect how often actions are generated. If the + rule type supports setting `summary` to `true`, the action can be + a summary of alerts at the specified notification interval. + Otherwise, an action runs for each alert at the specified + notification interval. NOTE: You cannot specify these parameters + when `notify_when` or `throttle` are defined at the rule level. + required: + - notify_when + - summary + properties: + notify_when: + $ref: '#/components/schemas/Alerting_notify_when_action' + summary: + type: boolean + description: Indicates whether the action is a summary. + throttle: + $ref: '#/components/schemas/Alerting_throttle_action' + group: + type: string + description: > + The group name, which affects when the action runs (for example, + when the threshold is met or when the alert is recovered). Each + rule type has a list of valid action group names. If you don't + need to group actions, set to `default`. + example: default + id: + type: string + description: The identifier for the connector saved object. + example: 9dca3e00-74f5-11ed-9801-35303b735aef + params: + type: object + description: >- + The parameters for the action, which are sent to the connector. + The `params` are handled as Mustache templates and passed a + default set of context. + additionalProperties: true + uuid: + type: string + description: A universally unique identifier (UUID) for the action. + example: 1c7a1280-f28c-4e06-96b2-e4e5f05d1d61 + Alerting_alert_delay: + type: object + description: >- + Indicates that an alert occurs only when the specified number of + consecutive runs met the rule conditions. + required: + - active + properties: + active: + type: number + description: The number of consecutive runs that must meet the rule conditions. + example: 3 + Alerting_consumer: + type: string + description: > + The name of the application or feature that owns the rule. For example: + `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, + `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`. + Alerting_enabled_rule: + type: boolean + description: >- + Indicates whether you want to run the rule on an interval basis after it + is created. + Alerting_name_rule: + type: string + description: > + The name of the rule. While this name does not have to be unique, a + distinctive name can help you identify a rule. + Alerting_notify_when: + type: string + description: > + Deprecated in 8.13.0. Use the `notify_when` property in the action + `frequency` object instead. Indicates how often alerts generate actions. + NOTE: You cannot specify `notify_when` at both the rule and action + level. If you set it at the rule level then update the rule in Kibana, + it is automatically changed to use action-specific values. + enum: + - onActionGroupChange + - onActiveAlert + - onThrottleInterval + deprecated: true + example: onActiveAlert + Alerting_schedule: + type: object + description: >- + The check interval, which specifies how frequently the rule conditions + are checked. The interval is specified in seconds, minutes, hours, or + days. + properties: + interval: + type: string + example: 1m + Alerting_tags: + type: array + description: The tags for the rule. + items: + type: string + default: [] + Alerting_throttle: + type: string + description: > + Deprecated in 8.13.0. Use the `throttle` property in the action + `frequency` object instead. The throttle interval, which defines how + often an alert generates repeated actions. NOTE: You cannot specify the + throttle interval at both the rule and action level. If you set it at + the rule level then update the rule in Kibana, it is automatically + changed to use action-specific values. + nullable: true + default: null + deprecated: true + example: 10m + Alerting_params_property_apm_anomaly: + required: + - windowSize + - windowUnit + - environment + - anomalySeverityType + properties: + serviceName: + type: string + description: The service name from APM + transactionType: + type: string + description: The transaction type from APM + windowSize: + type: number + example: 6 + description: The window size + windowUnit: + type: string + description: The window size unit + enum: + - m + - h + - d + environment: + type: string + description: The environment from APM + anomalySeverityType: + type: string + description: The anomaly threshold value + enum: + - critical + - major + - minor + - warning + Alerting_params_property_apm_error_count: + required: + - windowSize + - windowUnit + - threshold + - environment + properties: + serviceName: + type: string + description: The service name from APM + windowSize: + type: number + description: The window size + example: 6 + windowUnit: + type: string + description: The window size unit + enum: + - m + - h + - d + environment: + type: string + description: The environment from APM + threshold: + type: number + description: The error count threshold value + groupBy: + type: array + default: + - service.name + - service.environment + uniqueItems: true + items: + type: string + enum: + - service.name + - service.environment + - transaction.name + - error.grouping_key + errorGroupingKey: + type: string + Alerting_params_property_apm_transaction_duration: + required: + - windowSize + - windowUnit + - threshold + - environment + - aggregationType + properties: + serviceName: + type: string + description: The service name from APM + transactionType: + type: string + description: The transaction type from APM + transactionName: + type: string + description: The transaction name from APM + windowSize: + type: number + description: The window size + example: 6 + windowUnit: + type: string + description: ç + enum: + - m + - h + - d + environment: + type: string + threshold: + type: number + description: The latency threshold value + groupBy: + type: array + default: + - service.name + - service.environment + - transaction.type + uniqueItems: true + items: + type: string + enum: + - service.name + - service.environment + - transaction.type + - transaction.name + aggregationType: + type: string + enum: + - avg + - 95th + - 99th + Alerting_params_property_apm_transaction_error_rate: + required: + - windowSize + - windowUnit + - threshold + - environment + properties: + serviceName: + type: string + description: The service name from APM + transactionType: + type: string + description: The transaction type from APM + transactionName: + type: string + description: The transaction name from APM + windowSize: + type: number + description: The window size + example: 6 + windowUnit: + type: string + description: The window size unit + enum: + - m + - h + - d + environment: + type: string + description: The environment from APM + threshold: + type: number + description: The error rate threshold value + groupBy: + type: array + default: + - service.name + - service.environment + - transaction.type + uniqueItems: true + items: + type: string + enum: + - service.name + - service.environment + - transaction.type + - transaction.name + Alerting_aggfield: description: > - Filters the returned cases by assignees. Valid values are `none` or - unique identifiers for the user profiles. These identifiers can be found - by using the suggest user profile API. - schema: - oneOf: - - type: string - - type: array - items: + The name of the numeric field that is used in the aggregation. This + property is required when `aggType` is `avg`, `max`, `min` or `sum`. + type: string + Alerting_aggtype: + description: The type of aggregation to perform. + type: string + enum: + - avg + - count + - max + - min + - sum + default: count + Alerting_excludehitsfrompreviousrun: + description: > + Indicates whether to exclude matches from previous runs. If `true`, you + can avoid alert duplication by excluding documents that have already + been detected by the previous rule run. This option is not available + when a grouping field is specified. + type: boolean + Alerting_groupby: + description: > + Indicates whether the aggregation is applied over all documents (`all`) + or split into groups (`top`) using a grouping field (`termField`). If + grouping is used, an alert will be created for each group when it + exceeds the threshold; only the top groups (up to `termSize` number of + groups) are checked. + type: string + enum: + - all + - top + default: all + Alerting_termsize: + description: > + This property is required when `groupBy` is `top`. It specifies the + number of groups to check against the threshold and therefore limits the + number of alerts on high cardinality fields. + type: integer + Alerting_timefield: + description: The field that is used to calculate the time window. + type: string + Alerting_timewindowsize: + description: > + The size of the time window (in `timeWindowUnit` units), which + determines how far back to search for documents. Generally it should be + a value higher than the rule check interval to avoid gaps in detection. + type: integer + example: 5 + Alerting_timewindowunit: + description: | + The type of units for the time window: seconds, minutes, hours, or days. + type: string + enum: + - s + - m + - h + - d + example: m + Alerting_size: + description: > + The number of documents to pass to the configured actions when the + threshold condition is met. + type: integer + Alerting_termfield: + description: > + The names of up to four fields that are used for grouping the + aggregation. This property is required when `groupBy` is `top`. + oneOf: + - type: string + - type: array + items: + type: string + maxItems: 4 + Alerting_threshold: + description: > + The threshold value that is used with the `thresholdComparator`. If the + `thresholdComparator` is `between` or `notBetween`, you must specify the + boundary values. + type: array + items: + type: integer + example: 4000 + Alerting_thresholdcomparator: + description: >- + The comparison function for the threshold. For example, "is above", "is + above or equals", "is below", "is below or equals", "is between", and + "is not between". + type: string + enum: + - '>' + - '>=' + - < + - <= + - between + - notBetween + example: '>' + Alerting_params_es_query_rule: + oneOf: + - type: object + x-technical-preview: true + description: > + The parameters for an Elasticsearch query rule that uses ES|QL to + define the query. This functionality is in technical pre view and + may be changed or removed in a future release. Elastic will work to + fix any issues, but features in technical preview are not subject to + the support SLA of official GA features. + required: + - esqlQuery + - searchType + - size + - threshold + - thresholdComparator + - timeWindowSize + - timeWindowUnit + properties: + aggField: + $ref: '#/components/schemas/Alerting_aggfield' + aggType: + $ref: '#/components/schemas/Alerting_aggtype' + esqlQuery: + type: object + required: + - esql + properties: + esql: + description: >- + The query definition, which uses Elasticsearch Query + Language. + type: string + excludeHitsFromPreviousRun: + $ref: '#/components/schemas/Alerting_excludehitsfrompreviousrun' + groupBy: + $ref: '#/components/schemas/Alerting_groupby' + searchType: + description: >- + The type of query, in this case a query that uses Elasticsearch + Query Language (ES|QL). + type: string + enum: + - esqlQuery + example: esqlQuery + size: + type: integer + description: > + When `searchType` is `esqlQuery`, this property is required but + it does not affect the rule behavior. + example: 0 + termSize: + $ref: '#/components/schemas/Alerting_termsize' + threshold: + type: array + items: + type: integer + minimum: 0 + maximum: 0 + description: > + The threshold value that is used with the `thresholdComparator`. + When `searchType` is `esqlQuery`, this property is required and + must be set to zero. + thresholdComparator: + type: string + description: > + The comparison function for the threshold. When `searchType` is + `esqlQuery`, this property is required and must be set to ">". + Since the `threshold` value must be `0`, the result is that an + alert occurs whenever the query returns results. + enum: + - '>' + example: '>' + timeField: + $ref: '#/components/schemas/Alerting_timefield' + timeWindowSize: + $ref: '#/components/schemas/Alerting_timewindowsize' + timeWindowUnit: + $ref: '#/components/schemas/Alerting_timewindowunit' + - type: object + description: >- + The parameters for an Elasticsearch query rule that uses KQL or + Lucene to define the query. + required: + - searchType + - size + - threshold + - thresholdComparator + - timeWindowSize + - timeWindowUnit + properties: + aggField: + $ref: '#/components/schemas/Alerting_aggfield' + aggType: + $ref: '#/components/schemas/Alerting_aggtype' + excludeHitsFromPreviousRun: + $ref: '#/components/schemas/Alerting_excludehitsfrompreviousrun' + groupBy: + $ref: '#/components/schemas/Alerting_groupby' + searchConfiguration: + description: >- + The query definition, which uses KQL or Lucene to fetch the + documents from Elasticsearch. + type: object + properties: + filter: + type: array + items: + $ref: '#/components/schemas/Alerting_filter' + index: + description: The indices to query. + oneOf: + - type: string + - type: array + items: + type: string + query: + type: object + properties: + language: + type: string + example: kuery + query: + type: string + searchType: + description: >- + The type of query, in this case a text-based query that uses KQL + or Lucene. + type: string + enum: + - searchSource + example: searchSource + size: + $ref: '#/components/schemas/Alerting_size' + termField: + $ref: '#/components/schemas/Alerting_termfield' + termSize: + $ref: '#/components/schemas/Alerting_termsize' + threshold: + $ref: '#/components/schemas/Alerting_threshold' + thresholdComparator: + $ref: '#/components/schemas/Alerting_thresholdcomparator' + timeField: + $ref: '#/components/schemas/Alerting_timefield' + timeWindowSize: + $ref: '#/components/schemas/Alerting_timewindowsize' + timeWindowUnit: + $ref: '#/components/schemas/Alerting_timewindowunit' + - type: object + description: >- + The parameters for an Elasticsearch query rule that uses + Elasticsearch Query DSL to define the query. + required: + - esQuery + - index + - threshold + - thresholdComparator + - timeField + - timeWindowSize + - timeWindowUnit + properties: + aggField: + $ref: '#/components/schemas/Alerting_aggfield' + aggType: + $ref: '#/components/schemas/Alerting_aggtype' + esQuery: + description: The query definition, which uses Elasticsearch Query DSL. + type: string + excludeHitsFromPreviousRun: + $ref: '#/components/schemas/Alerting_excludehitsfrompreviousrun' + groupBy: + $ref: '#/components/schemas/Alerting_groupby' + index: + description: The indices to query. + oneOf: + - type: array + items: + type: string + - type: string + searchType: + description: >- + The type of query, in this case a query that uses Elasticsearch + Query DSL. + type: string + enum: + - esQuery + default: esQuery + example: esQuery + size: + $ref: '#/components/schemas/Alerting_size' + termField: + $ref: '#/components/schemas/Alerting_termfield' + termSize: + $ref: '#/components/schemas/Alerting_termsize' + threshold: + $ref: '#/components/schemas/Alerting_threshold' + thresholdComparator: + $ref: '#/components/schemas/Alerting_thresholdcomparator' + timeField: + $ref: '#/components/schemas/Alerting_timefield' + timeWindowSize: + $ref: '#/components/schemas/Alerting_timewindowsize' + timeWindowUnit: + $ref: '#/components/schemas/Alerting_timewindowunit' + Alerting_params_index_threshold_rule: + type: object + description: The parameters for an index threshold rule. + required: + - index + - threshold + - thresholdComparator + - timeField + - timeWindowSize + - timeWindowUnit + properties: + aggField: + $ref: '#/components/schemas/Alerting_aggfield' + aggType: + $ref: '#/components/schemas/Alerting_aggtype' + filterKuery: + description: A KQL expression thats limits the scope of alerts. + type: string + groupBy: + $ref: '#/components/schemas/Alerting_groupby' + index: + description: The indices to query. + type: array + items: + type: string + termField: + $ref: '#/components/schemas/Alerting_termfield' + termSize: + $ref: '#/components/schemas/Alerting_termsize' + threshold: + $ref: '#/components/schemas/Alerting_threshold' + thresholdComparator: + $ref: '#/components/schemas/Alerting_thresholdcomparator' + timeField: + $ref: '#/components/schemas/Alerting_timefield' + timeWindowSize: + $ref: '#/components/schemas/Alerting_timewindowsize' + timeWindowUnit: + $ref: '#/components/schemas/Alerting_timewindowunit' + Alerting_params_property_infra_inventory: + properties: + criteria: + type: array + items: + type: object + properties: + metric: + type: string + enum: + - count + - cpu + - diskLatency + - load + - memory + - memoryTotal + - tx + - rx + - logRate + - diskIOReadBytes + - diskIOWriteBytes + - s3TotalRequests + - s3NumberOfObjects + - s3BucketSize + - s3DownloadBytes + - s3UploadBytes + - rdsConnections + - rdsQueriesExecuted + - rdsActiveTransactions + - rdsLatency + - sqsMessagesVisible + - sqsMessagesDelayed + - sqsMessagesSent + - sqsMessagesEmpty + - sqsOldestMessage + - custom + timeSize: + type: number + timeUnit: + type: string + enum: + - s + - m + - h + - d + sourceId: + type: string + threshold: + type: array + items: + type: number + comparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + customMetric: + type: object + properties: + type: + type: string + enum: + - custom + field: + type: string + aggregation: + type: string + enum: + - avg + - max + - min + - rate + id: + type: string + label: + type: string + warningThreshold: + type: array + items: + type: number + warningComparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + filterQuery: + type: string + filterQueryText: + type: string + nodeType: + type: string + enum: + - host + - pod + - container + - awsEC2 + - awsS3 + - awsSQS + - awsRDS + sourceId: + type: string + alertOnNoData: + type: boolean + Alerting_params_property_infra_metric_threshold: + properties: + criteria: + type: array + items: + oneOf: + - title: non count criterion + type: object + properties: + threshold: + type: array + items: + type: number + comparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + timeUnit: + type: string + timeSize: + type: number + warningThreshold: + type: array + items: + type: number + warningComparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + metric: + type: string + aggType: + type: string + enum: + - avg + - max + - min + - cardinality + - rate + - count + - sum + - p95 + - p99 + - custom + - title: count criterion + type: object + properties: + threshold: + type: array + items: + type: number + comparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + timeUnit: + type: string + timeSize: + type: number + warningThreshold: + type: array + items: + type: number + warningComparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + aggType: + type: string + enum: + - count + - title: custom criterion + type: object + properties: + threshold: + type: array + items: + type: number + comparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + timeUnit: + type: string + timeSize: + type: number + warningThreshold: + type: array + items: + type: number + warningComparator: + type: string + enum: + - < + - <= + - '>' + - '>=' + - between + - outside + aggType: + type: string + enum: + - custom + customMetric: + type: array + items: + oneOf: + - type: object + properties: + name: + type: string + aggType: + type: string + enum: + - avg + - sum + - max + - min + - cardinality + field: + type: string + - type: object + properties: + name: + type: string + aggType: + type: string + enum: + - count + filter: + type: string + equation: + type: string + label: + type: string + groupBy: + oneOf: + - type: string + - type: array + items: + type: string + filterQuery: + type: string + sourceId: + type: string + alertOnNoData: + type: boolean + alertOnGroupDisappear: + type: boolean + Alerting_params_property_log_threshold: + oneOf: + - title: Count + type: object + required: + - count + - timeSize + - timeUnit + - logView + properties: + criteria: + type: array + items: + type: object + properties: + field: + type: string + example: my.field + comparator: + type: string + enum: + - more than + - more than or equals + - less than + - less than or equals + - equals + - does not equal + - matches + - does not match + - matches phrase + - does not match phrase + value: + oneOf: + - type: number + example: 42 + - type: string + example: value + count: + type: object + properties: + comparator: + type: string + enum: + - more than + - more than or equals + - less than + - less than or equals + - equals + - does not equal + - matches + - does not match + - matches phrase + - does not match phrase + value: + type: number + example: 100 + timeSize: + type: number + example: 6 + timeUnit: + type: string + enum: + - s + - m + - h + - d + logView: + type: object + properties: + logViewId: + type: string + type: + type: string + enum: + - log-view-reference + example: log-view-reference + groupBy: + type: array + items: + type: string + - title: Ratio + type: object + required: + - count + - timeSize + - timeUnit + - logView + properties: + criteria: + type: array + items: + minItems: 2 + maxItems: 2 + type: array + items: + type: object + properties: + field: + type: string + example: my.field + comparator: + type: string + enum: + - more than + - more than or equals + - less than + - less than or equals + - equals + - does not equal + - matches + - does not match + - matches phrase + - does not match phrase + value: + oneOf: + - type: number + example: 42 + - type: string + example: value + count: + type: object + properties: + comparator: + type: string + enum: + - more than + - more than or equals + - less than + - less than or equals + - equals + - does not equal + - matches + - does not match + - matches phrase + - does not match phrase + value: + type: number + example: 100 + timeSize: + type: number + example: 6 + timeUnit: type: string - maxItems: 100 - Cases_category: - in: query - name: category - description: Filters the returned cases by category. - schema: - oneOf: - - type: string - example: my-category - - type: array - items: + enum: + - s + - m + - h + - d + logView: + type: object + properties: + logViewId: + type: string + type: + type: string + enum: + - log-view-reference + example: log-view-reference + groupBy: + type: array + items: + type: string + Alerting_params_property_slo_burn_rate: + properties: + sloId: + description: The SLO identifier used by the rule + type: string + example: 8853df00-ae2e-11ed-90af-09bb6422b258 + burnRateThreshold: + description: The burn rate threshold used to trigger the alert + type: number + example: 14.4 + maxBurnRateThreshold: + description: >- + The maximum burn rate threshold value defined by the SLO error + budget + type: number + example: 168 + longWindow: + description: The duration of the long window used to compute the burn rate + type: object + properties: + value: + description: The duration value + type: number + example: 6 + unit: + description: The duration unit type: string - maxItems: 100 - Cases_defaultSearchOperator: - in: query - name: defaultSearchOperator - description: he default operator to use for the simple_query_string. - schema: - type: string - default: OR - example: OR - Cases_from: - in: query - name: from - description: > - Returns only cases that were created after a specific date. The date - must be specified as a KQL data range or date match expression. - schema: - type: string - example: now-1d - Cases_owner: - in: query - name: owner - description: > - A filter to limit the response to a specific set of applications. If - this parameter is omitted, the response contains information about all - the cases that the user has access to read. - schema: - oneOf: - - $ref: '#/components/schemas/Cases_owners' - - type: array - items: - $ref: '#/components/schemas/Cases_owners' - example: cases - Cases_page_index: - in: query - name: page - description: The page number to return. - required: false - schema: - type: integer - default: 1 - Cases_page_size: - in: query - name: perPage - description: The number of items to return. Limited to 100 items. - required: false - schema: - type: integer - default: 20 - maximum: 100 - Cases_reporters: - in: query - name: reporters - description: Filters the returned cases by the user name of the reporter. - schema: - oneOf: - - type: string - - type: array - items: + example: h + shortWindow: + description: The duration of the short window used to compute the burn rate + type: object + properties: + value: + description: The duration value + type: number + example: 30 + unit: + description: The duration unit type: string - maxItems: 100 - example: elastic - Cases_search: - in: query - name: search - description: >- - An Elasticsearch simple_query_string query that filters the objects in - the response. - schema: - type: string - Cases_searchFields: - in: query - name: searchFields - description: The fields to perform the simple_query_string parsed query against. - schema: - oneOf: - - $ref: '#/components/schemas/Cases_searchFieldsType' - - type: array - items: - $ref: '#/components/schemas/Cases_searchFieldsType' - Cases_severity: - in: query - name: severity - description: The severity of the case. - schema: - type: string - enum: - - critical - - high - - low - - medium - Cases_sortField: - in: query - name: sortField - description: Determines which field is used to sort the results. - schema: - type: string - enum: - - createdAt - - updatedAt - - closedAt - - title - - category - - status - - severity - default: createdAt - example: updatedAt - Cases_sort_order: - in: query - name: sortOrder - description: Determines the sort order. - required: false - schema: - type: string - enum: - - asc - - desc - default: desc - Cases_status: - in: query - name: status - description: Filters the returned cases by state. - schema: - type: string - enum: - - closed - - in-progress - - open - example: open - Cases_tags: - in: query - name: tags - description: Filters the returned cases by tags. - schema: - oneOf: - - type: string - - type: array - items: + example: m + Alerting_params_property_synthetics_uptime_tls: + properties: + search: + type: string + certExpirationThreshold: + type: number + certAgeThreshold: + type: number + Alerting_params_property_synthetics_monitor_status: + required: + - numTimes + - shouldCheckStatus + - shouldCheckAvailability + properties: + availability: + type: object + properties: + range: + type: number + rangeUnit: + type: string + threshold: + type: string + filters: + oneOf: + - type: string + - type: object + deprecated: true + properties: + monitor.type: + type: array + items: + type: string + observer.geo.name: + type: array + items: + type: string + tags: + type: array + items: + type: string + url.port: + type: array + items: + type: string + locations: + deprecated: true + type: array + items: + type: string + numTimes: + type: number + search: + type: string + shouldCheckStatus: + type: boolean + shouldCheckAvailability: + type: boolean + timerangeCount: + type: number + timerangeUnit: + type: string + timerange: + deprecated: true + type: object + properties: + from: + type: string + to: + type: string + version: + type: number + isAutoGenerated: + type: boolean + Alerting_create_rule_request: + title: Create rule request body properties + description: The properties vary depending on the rule type. + oneOf: + - $ref: >- + #/components/schemas/Alerting_create_anomaly_detection_alert_rule_request + - $ref: >- + #/components/schemas/Alerting_create_anomaly_detection_jobs_health_rule_request + - $ref: '#/components/schemas/Alerting_create_apm_anomaly_rule_request' + - $ref: '#/components/schemas/Alerting_create_apm_error_count_rule_request' + - $ref: >- + #/components/schemas/Alerting_create_apm_transaction_duration_rule_request + - $ref: >- + #/components/schemas/Alerting_create_apm_transaction_error_rate_rule_request + - $ref: '#/components/schemas/Alerting_create_es_query_rule_request' + - $ref: '#/components/schemas/Alerting_create_geo_containment_rule_request' + - $ref: '#/components/schemas/Alerting_create_index_threshold_rule_request' + - $ref: '#/components/schemas/Alerting_create_infra_inventory_rule_request' + - $ref: >- + #/components/schemas/Alerting_create_infra_metric_anomaly_rule_request + - $ref: >- + #/components/schemas/Alerting_create_infra_metric_threshold_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_jvm_memory_usage_rule_request + - $ref: '#/components/schemas/Alerting_create_log_threshold_rule_request' + - $ref: >- + #/components/schemas/Alerting_create_monitoring_ccr_exceptions_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_cluster_health_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_cpu_usage_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_disk_usage_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_elasticsearch_version_mismatch_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_license_expiration_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_kibana_version_mismatch_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_logstash_version_mismatch_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_missing_data_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_nodes_changed_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_shard_size_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_thread_pool_search_rejections_rule_request + - $ref: >- + #/components/schemas/Alerting_create_monitoring_thread_pool_write_rejections_rule_request + - $ref: '#/components/schemas/Alerting_create_siem_eql_rule_request' + - $ref: '#/components/schemas/Alerting_create_siem_indicator_rule_request' + - $ref: '#/components/schemas/Alerting_create_siem_ml_rule_request' + - $ref: '#/components/schemas/Alerting_create_siem_new_terms_rule_request' + - $ref: '#/components/schemas/Alerting_create_siem_notifications_rule_request' + - $ref: '#/components/schemas/Alerting_create_siem_query_rule_request' + - $ref: '#/components/schemas/Alerting_create_siem_saved_query_rule_request' + - $ref: '#/components/schemas/Alerting_create_siem_threshold_rule_request' + - $ref: '#/components/schemas/Alerting_create_slo_burn_rate_rule_request' + - $ref: >- + #/components/schemas/Alerting_create_synthetics_monitor_status_rule_request + - $ref: >- + #/components/schemas/Alerting_create_synthetics_uptime_duration_anomaly_rule_request + - $ref: >- + #/components/schemas/Alerting_create_synthetics_uptime_tls_rule_request + - $ref: >- + #/components/schemas/Alerting_create_synthetics_uptime_tls_certificate_rule_request + - $ref: '#/components/schemas/Alerting_create_transform_health_rule_request' + - $ref: >- + #/components/schemas/Alerting_create_uptime_monitor_status_rule_request + discriminator: + propertyName: rule_type_id + mapping: + xpack.ml.anomaly_detection_alert: >- + #/components/schemas/Alerting_create_anomaly_detection_alert_rule_request + xpack.ml.anomaly_detection_jobs_health: >- + #/components/schemas/Alerting_create_anomaly_detection_jobs_health_rule_request + apm.anomaly: '#/components/schemas/Alerting_create_apm_anomaly_rule_request' + apm.error_rate: '#/components/schemas/Alerting_create_apm_error_count_rule_request' + apm.transaction_duration: >- + #/components/schemas/Alerting_create_apm_transaction_duration_rule_request + apm.transaction_error_rate: >- + #/components/schemas/Alerting_create_apm_transaction_error_rate_rule_request + .es-query: '#/components/schemas/Alerting_create_es_query_rule_request' + .geo-containment: '#/components/schemas/Alerting_create_geo_containment_rule_request' + .index-threshold: '#/components/schemas/Alerting_create_index_threshold_rule_request' + metrics.alert.inventory.threshold: '#/components/schemas/Alerting_create_infra_inventory_rule_request' + metrics.alert.anomaly: >- + #/components/schemas/Alerting_create_infra_metric_anomaly_rule_request + metrics.alert.threshold: >- + #/components/schemas/Alerting_create_infra_metric_threshold_rule_request + monitoring_alert_jvm_memory_usage: >- + #/components/schemas/Alerting_create_monitoring_jvm_memory_usage_rule_request + logs.alert.document.count: '#/components/schemas/Alerting_create_log_threshold_rule_request' + monitoring_ccr_read_exceptions: >- + #/components/schemas/Alerting_create_monitoring_ccr_exceptions_rule_request + monitoring_alert_cluster_health: >- + #/components/schemas/Alerting_create_monitoring_cluster_health_rule_request + monitoring_alert_cpu_usage: >- + #/components/schemas/Alerting_create_monitoring_cpu_usage_rule_request + monitoring_alert_disk_usage: >- + #/components/schemas/Alerting_create_monitoring_disk_usage_rule_request + monitoring_alert_elasticsearch_version_mismatch: >- + #/components/schemas/Alerting_create_monitoring_elasticsearch_version_mismatch_rule_request + monitoring_alert_license_expiration: >- + #/components/schemas/Alerting_create_monitoring_license_expiration_rule_request + monitoring_alert_kibana_version_mismatch: >- + #/components/schemas/Alerting_create_monitoring_kibana_version_mismatch_rule_request + monitoring_alert_logstash_version_mismatch: >- + #/components/schemas/Alerting_create_monitoring_logstash_version_mismatch_rule_request + monitoring_alert_missing_monitoring_data: >- + #/components/schemas/Alerting_create_monitoring_missing_data_rule_request + monitoring_alert_nodes_changed: >- + #/components/schemas/Alerting_create_monitoring_nodes_changed_rule_request + monitoring_shard_size: >- + #/components/schemas/Alerting_create_monitoring_shard_size_rule_request + monitoring_alert_thread_pool_search_rejections: >- + #/components/schemas/Alerting_create_monitoring_thread_pool_search_rejections_rule_request + monitoring_alert_thread_pool_write_rejections: >- + #/components/schemas/Alerting_create_monitoring_thread_pool_write_rejections_rule_request + siem.eqlRule: '#/components/schemas/Alerting_create_siem_eql_rule_request' + siem.indicatorRule: '#/components/schemas/Alerting_create_siem_indicator_rule_request' + siem.mlRule: '#/components/schemas/Alerting_create_siem_ml_rule_request' + siem.newTermsRule: '#/components/schemas/Alerting_create_siem_new_terms_rule_request' + siem.notifications: '#/components/schemas/Alerting_create_siem_notifications_rule_request' + siem.queryRule: '#/components/schemas/Alerting_create_siem_query_rule_request' + siem.savedQueryRule: '#/components/schemas/Alerting_create_siem_saved_query_rule_request' + siem.thresholdRule: '#/components/schemas/Alerting_create_siem_threshold_rule_request' + slo.rules.burnRate: '#/components/schemas/Alerting_create_slo_burn_rate_rule_request' + xpack.synthetics.alerts.monitorStatus: >- + #/components/schemas/Alerting_create_synthetics_monitor_status_rule_request + xpack.uptime.alerts.durationAnomaly: >- + #/components/schemas/Alerting_create_synthetics_uptime_duration_anomaly_rule_request + xpack.uptime.alerts.tls: >- + #/components/schemas/Alerting_create_synthetics_uptime_tls_rule_request + xpack.uptime.alerts.tlsCertificate: >- + #/components/schemas/Alerting_create_synthetics_uptime_tls_certificate_rule_request + transform_health: '#/components/schemas/Alerting_create_transform_health_rule_request' + xpack.uptime.alerts.monitorStatus: >- + #/components/schemas/Alerting_create_uptime_monitor_status_rule_request + Alerting_rule_response_properties: + title: Rule response properties + type: object + required: + - actions + - api_key_owner + - consumer + - created_at + - created_by + - enabled + - execution_status + - id + - mute_all + - muted_alert_ids + - name + - params + - rule_type_id + - schedule + - tags + - throttle + - updated_at + - updated_by + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + api_key_created_by_user: + type: boolean + description: >- + Indicates whether the API key that is associated with the rule was + created by the user. + example: false + api_key_owner: + type: string + description: > + The owner of the API key that is associated with the rule and used + to run background tasks. + nullable: true + example: elastic + consumer: + type: string + description: >- + The application or feature that owns the rule. For example, + `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, + `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or + `uptime`. + example: alerts + created_at: + type: string + description: The date and time that the rule was created. + format: date-time + example: '2022-12-05T23:36:58.284Z' + created_by: + type: string + description: The identifier for the user that created the rule. + nullable: true + example: elastic + enabled: + type: boolean + description: Indicates whether the rule is currently enabled. + example: true + execution_status: + type: object + properties: + last_duration: + type: integer + example: 55 + last_execution_date: type: string - maxItems: 100 - example: tag-1 - Cases_to: - in: query - name: to - description: > - Returns only cases that were created before a specific date. The date - must be specified as a KQL data range or date match expression. - schema: - type: string - example: now+1d - Cases_alert_id: - in: path - name: alertId - description: An identifier for the alert. - required: true - schema: - type: string - example: 09f0c261e39e36351d75995b78bb83673774d1bc2cca9df2d15f0e5c0a99a540 - Cases_configuration_id: - in: path - name: configurationId - description: An identifier for the configuration. - required: true - schema: - type: string - example: 3297a0f0-b5ec-11ec-b141-0fdb20a7f9a9 - Cases_case_id: - in: path - name: caseId - description: >- - The identifier for the case. To retrieve case IDs, use the find cases - API. All non-ASCII characters must be URL encoded. - required: true - schema: - type: string - example: 9c235210-6834-11ea-a78c-6ffb38a34414 - Cases_includeComments: - in: query - name: includeComments - description: >- - Deprecated in 8.1.0. This parameter is deprecated and will be removed in - a future release. It determines whether case comments are returned. - deprecated: true - schema: - type: boolean - default: true - Cases_comment_id: - in: path - name: commentId + format: date-time + example: '2022-12-06T00:13:43.890Z' + status: + type: string + example: ok + id: + type: string + description: The identifier for the rule. + example: b530fed0-74f5-11ed-9801-35303b735aef + last_run: + type: object + properties: + alerts_count: + type: object + properties: + active: + type: integer + ignored: + type: integer + new: + type: integer + recovered: + type: integer + outcome: + type: string + example: succeeded + outcome_msg: + type: array + items: + type: string + nullable: true + outcome_order: + type: integer + warning: + type: string + nullable: true + example: null + muted_alert_ids: + type: array + nullable: true + items: + type: string + mute_all: + type: boolean + example: false + name: + type: string + description: The name of the rule. + example: cluster_health_rule + next_run: + type: string + format: date-time + nullable: true + example: '2022-12-06T00:14:43.818Z' + notify_when: + type: string + description: Indicates how often alerts generate actions. + nullable: true + params: + type: object + description: The parameters for the rule. + additionalProperties: true + revision: + type: integer + description: The rule revision number. + rule_type_id: + type: string + description: > + The identifier for the type of rule. For example, `.es-query`, + `.index-threshold`, `logs.alert.document.count`, + `monitoring_alert_cluster_health`, `siem.thresholdRule`, or + `xpack.ml.anomaly_detection_alert`. + example: monitoring_alert_cluster_health + running: + type: boolean + description: Indicates whether the rule is running. + schedule: + $ref: '#/components/schemas/Alerting_schedule' + scheduled_task_id: + type: string + example: b530fed0-74f5-11ed-9801-35303b735aef + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + updated_at: + type: string + description: The date and time that the rule was updated most recently. + example: '2022-12-05T23:36:58.284Z' + updated_by: + type: string + description: The identifier for the user that updated this rule most recently. + nullable: true + example: elastic + Alerting_401_response: + type: object + title: Unsuccessful rule API response + properties: + error: + type: string + example: Unauthorized + enum: + - Unauthorized + message: + type: string + statusCode: + type: integer + example: 401 + enum: + - 401 + Alerting_404_response: + type: object + properties: + error: + type: string + example: Not Found + enum: + - Not Found + message: + type: string + example: Saved object [alert/caaad6d0-920c-11ed-b36a-874bd1548a00] not found + statusCode: + type: integer + example: 404 + enum: + - 404 + Alerting_update_rule_request: + title: Update rule request description: > - The identifier for the comment. To retrieve comment IDs, use the get - case or find cases APIs. - required: true - schema: - type: string - example: 71ec1870-725b-11ea-a0b2-c51ea50a58e2 - Cases_connector_id: - in: path - name: connectorId - description: >- - An identifier for the connector. To retrieve connector IDs, use the find - connectors API. - required: true - schema: - type: string - example: abed3a70-71bd-11ea-a0b2-c51ea50a58e2 - Cases_user_action_types: - in: query - name: types - description: Determines the types of user actions to return. - schema: - type: array - items: + The update rule API request body varies depending on the type of rule + and actions. + type: object + required: + - name + - params + - schedule + properties: + actions: + $ref: '#/components/schemas/Alerting_actions' + alert_delay: + $ref: '#/components/schemas/Alerting_alert_delay' + name: + type: string + description: The name of the rule. + example: cluster_health_rule + notify_when: + $ref: '#/components/schemas/Alerting_notify_when' + params: + type: object + description: The parameters for the rule. + additionalProperties: true + schedule: + $ref: '#/components/schemas/Alerting_schedule' + tags: + $ref: '#/components/schemas/Alerting_tags' + throttle: + $ref: '#/components/schemas/Alerting_throttle' + Alerting_fieldmap_properties: + title: Field map objects in the get rule types response + type: object + properties: + array: + type: boolean + description: Indicates whether the field is an array. + dynamic: + type: boolean + description: Indicates whether it is a dynamic field mapping. + format: + type: string + description: > + Indicates the format of the field. For example, if the `type` is + `date_range`, the `format` can be + `epoch_millis||strict_date_optional_time`. + ignore_above: + type: integer + description: >- + Specifies the maximum length of a string field. Longer strings are + not indexed or stored. + index: + type: boolean + description: Indicates whether field values are indexed. + path: + type: string + description: TBD + properties: + type: object + description: > + Details about the object properties. This property is applicable + when `type` is `object`. + additionalProperties: + type: object + properties: + type: + type: string + description: The data type for each object property. + required: + type: boolean + description: Indicates whether the field is required. + scaling_factor: + type: integer + description: > + The scaling factor to use when encoding values. This property is + applicable when `type` is `scaled_float`. Values will be multiplied + by this factor at index time and rounded to the closest long value. + type: + type: string + description: Specifies the data type for the field. + example: scaled_float + Alerting_400_response: + title: Bad request + type: object + required: + - error + - message + - statusCode + properties: + error: + type: string + enum: + - Bad Request + message: + type: string + statusCode: + type: integer + enum: + - 400 + Alerting_alert_response_properties: + title: Legacy alert response properties + type: object + properties: + actions: + type: array + items: + type: object + alertTypeId: + type: string + example: .index-threshold + apiKeyOwner: + type: string + nullable: true + example: elastic + createdAt: + type: string + description: The date and time that the alert was created. + format: date-time + example: '2022-12-05T23:36:58.284Z' + createdBy: type: string - enum: - - action - - alert - - assignees - - attachment - - comment - - connector - - create_case - - description - - pushed - - settings - - severity - - status - - tags - - title - - user - example: create_case - Connectors_kbn_xsrf: - schema: - type: string - in: header - name: kbn-xsrf - description: Cross-site request forgery protection - required: true - Connectors_connector_id: - in: path - name: connectorId - description: An identifier for the connector. - required: true - schema: - type: string - example: df770e30-8b8b-11ed-a780-3b746c987a81 - Connectors_action_id: - in: path - name: actionId - description: An identifier for the action. - required: true - schema: - type: string - example: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad - Data_views_kbn_xsrf: - schema: - type: string - in: header - name: kbn-xsrf - description: Cross-site request forgery protection - required: true - Data_views_view_id: - in: path - name: viewId - description: An identifier for the data view. - required: true - schema: - type: string - example: ff959d40-b880-11e8-a6d9-e546fe2bba5f - Data_views_field_name: - in: path - name: fieldName - description: The name of the runtime field. - required: true - schema: - type: string - example: hour_of_day - Machine_learning_APIs_simulateParam: - in: query - name: simulate - description: >- - When true, simulates the synchronization by returning only the list of - actions that would be performed. - required: false - schema: - type: boolean - example: 'true' - Saved_objects_kbn_xsrf: - schema: - type: string - in: header - name: kbn-xsrf - description: Cross-site request forgery protection - required: true - Saved_objects_saved_object_type: - in: path - name: type - description: >- - Valid options include `visualization`, `dashboard`, `search`, - `index-pattern`, `config`. - required: true - schema: - type: string - Saved_objects_saved_object_id: - in: path - name: id - description: An identifier for the saved object. - required: true - schema: - type: string - SLOs_kbn_xsrf: - schema: - type: string - in: header - name: kbn-xsrf - description: Cross-site request forgery protection - required: true - SLOs_space_id: - in: path - name: spaceId - description: >- - An identifier for the space. If `/s/` and the identifier are omitted - from the path, the default space is used. - required: true - schema: - type: string - example: default - SLOs_slo_id: - in: path - name: sloId - description: An identifier for the slo. - required: true - schema: - type: string - example: 9c235211-6834-11ea-a78c-6feb38a34414 - schemas: + description: The identifier for the user that created the alert. + example: elastic + enabled: + type: boolean + description: Indicates whether the alert is currently enabled. + example: true + executionStatus: + type: object + properties: + lastExecutionDate: + type: string + format: date-time + example: '2022-12-06T00:13:43.890Z' + status: + type: string + example: ok + id: + type: string + description: The identifier for the alert. + example: b530fed0-74f5-11ed-9801-35303b735aef + muteAll: + type: boolean + example: false + mutedInstanceIds: + type: array + nullable: true + items: + type: string + name: + type: string + description: The name of the alert. + example: my alert + notifyWhen: + type: string + example: onActionGroupChange + params: + type: object + additionalProperties: true + schedule: + type: object + properties: + interval: + type: string + scheduledTaskId: + type: string + example: b530fed0-74f5-11ed-9801-35303b735aef + tags: + type: array + items: + type: string + throttle: + type: string + nullable: true + updatedAt: + type: string + example: '2022-12-05T23:36:58.284Z' + updatedBy: + type: string + description: The identifier for the user that updated this alert most recently. + nullable: true + example: elastic Cases_assignees: type: array description: An array containing users that are assigned to the case. @@ -12643,6 +17961,1102 @@ components: - metrics type: object examples: + Alerting_create_es_query_esql_rule_request: + summary: >- + Create an Elasticsearch query rule that uses Elasticsearch Query + Language (ES|QL). + value: + name: my Elasticsearch query ESQL rule + params: + searchType: esqlQuery + esqlQuery: + esql: >- + FROM kibana_sample_data_logs | KEEP bytes, clientip, host, + geo.dest | where geo.dest != "GB" | STATS sumbytes = sum(bytes) by + clientip, host | WHERE sumbytes > 5000 | SORT sumbytes desc | + LIMIT 10 + timeField: '@timestamp' + timeWindowSize: 1 + timeWindowUnit: d + size: 0 + thresholdComparator: '>' + threshold: + - 0 + consumer: stackAlerts + rule_type_id: .es-query + schedule: + interval: 1d + actions: + - group: query matched + id: d0db1fe0-78d6-11ee-9177-f7d404c8c945 + params: + level: info + message: >- + Elasticsearch query rule '{{rule.name}}' is active: + + - Value: {{context.value}} - Conditions Met: + {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} - + Timestamp: {{context.date}} - Link: {{context.link}} + frequency: + summary: false + notify_when: onActiveAlert + Alerting_create_es_query_rule_request: + summary: >- + Create an Elasticsearch query rule that uses Elasticsearch query domain + specific language (DSL) to define its query and a server log connector + to send notifications. + value: + actions: + - group: query matched + params: + level: info + message: >- + The system has detected {{alerts.new.count}} new, + {{alerts.ongoing.count}} ongoing, and {{alerts.recovered.count}} + recovered alerts. + id: fdbece50-406c-11ee-850e-c71febc4ca7f + frequency: + throttle: 1d + summary: true + notify_when: onThrottleInterval + - group: recovered + params: + level: info + message: Recovered + id: fdbece50-406c-11ee-850e-c71febc4ca7f + frequency: + summary: false + notify_when: onActionGroupChange + consumer: alerts + name: my Elasticsearch query rule + params: + esQuery: '"""{"query":{"match_all" : {}}}"""' + index: + - kibana_sample_data_logs + size: 100 + threshold: + - 100 + thresholdComparator: '>' + timeField: '@timestamp' + timeWindowSize: 1 + timeWindowUnit: d + rule_type_id: .es-query + schedule: + interval: 1d + Alerting_create_es_query_kql_rule_request: + summary: >- + Create an Elasticsearch query rule that uses Kibana query language + (KQL). + value: + consumer: alerts + name: my Elasticsearch query KQL rule + params: + aggType: count + excludeHitsFromPreviousRun: true + groupBy: all + searchConfiguration: + query: + query: '""geo.src : "US" ""' + language: kuery + index: 90943e30-9a47-11e8-b64d-95841ca0b247 + searchType: searchSource + size: 100 + threshold: + - 1000 + thresholdComparator: '>' + timeWindowSize: 5 + timeWindowUnit: m + rule_type_id: .es-query + schedule: + interval: 1m + Alerting_create_index_threshold_rule_request: + summary: Create an index threshold rule. + value: + actions: + - id: 48de3460-f401-11ed-9f8e-399c75a2deeb + frequency: + notify_when: onActionGroupChange + summary: false + group: threshold met + params: + level: info + message: >- + Rule '{{rule.name}}' is active for group '{{context.group}}': + + + - Value: {{context.value}} + + - Conditions Met: {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} + + - Timestamp: {{context.date}} + alert_delay: + active: 3 + consumer: alerts + name: my rule + params: + aggType: avg + termSize: 6 + thresholdComparator: '>' + timeWindowSize: 5 + timeWindowUnit: m + groupBy: top + threshold: + - 1000 + index: + - .test-index + timeField: '@timestamp' + aggField: sheet.version + termField: name.keyword + rule_type_id: .index-threshold + schedule: + interval: 1m + tags: + - cpu + Alerting_create_tracking_containment_rule_request: + summary: Create a tracking containment rule. + value: + consumer: alerts + name: my tracking rule + params: + index: kibana_sample_data_logs + dateField": '@timestamp' + geoField: geo.coordinates + entity: agent.keyword + boundaryType: entireIndex + boundaryIndexTitle: boundary* + boundaryGeoField: location + boundaryNameField: name + indexId: 90943e30-9a47-11e8-b64d-95841ca0b247 + boundaryIndexId: 0cd90abf-abe7-44c7-909a-f621bbbcfefc + rule_type_id: .geo-containment + schedule: + interval: 1h + Alerting_create_es_query_esql_rule_response: + summary: >- + The create rule API returns a JSON object that contains details about + the rule. + value: + id: e0d62360-78e8-11ee-9177-f7d404c8c945 + enabled: true + name: my Elasticsearch query ESQL rule + tags: [] + rule_type_id: .es-query + consumer: stackAlerts + schedule: + interval: 1d + actions: + - group: query matched + id: d0db1fe0-78d6-11ee-9177-f7d404c8c945 + params: + level: info + message: >- + Elasticsearch query rule '{{rule.name}}' is active: + + - Value: {{context.value}} - Conditions Met: + {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} - + Timestamp: {{context.date}} - Link: {{context.link}} + connector_type_id: .server-log + frequency: + summary: false + notify_when: onActiveAlert + throttle: null + uuid: bfe370a3-531b-4855-bbe6-ad739f578844 + params: + searchType: esqlQuery + esqlQuery: + esql: >- + FROM kibana_sample_data_logs | keep bytes, clientip, host, + geo.dest | WHERE geo.dest != "GB" | stats sumbytes = sum(bytes) by + clientip, host | WHERE sumbytes > 5000 | sort sumbytes desc | + limit 10 + timeField: '@timestamp' + timeWindowSize: 1 + timeWindowUnit: d + size: 0 + thresholdComparator: '>' + threshold: + - 0 + excludeHitsFromPreviousRun": true, + aggType: count + groupBy: all + scheduled_task_id: e0d62360-78e8-11ee-9177-f7d404c8c945 + created_by: elastic + updated_by: elastic", + created_at: '2023-11-01T19:00:10.453Z' + updated_at: '2023-11-01T19:00:10.453Z' + api_key_owner: elastic + api_key_created_by_user: false + throttle: null + mute_all: false + notify_when: null + muted_alert_ids: [] + execution_status: + status: pending + last_execution_date: '2023-11-01T19:00:10.453Z' + revision: 0 + running: false + Alerting_create_es_query_rule_response: + summary: >- + The create rule API returns a JSON object that contains details about + the rule. + value: + id: 58148c70-407f-11ee-850e-c71febc4ca7f + enabled: true + name: my Elasticsearch query rule + tags: [] + rule_type_id: .es-query + consumer: alerts + schedule: + interval: 1d + actions: + - group: query matched + id: fdbece50-406c-11ee-850e-c71febc4ca7f + params: + level: info + message: >- + The system has detected {{alerts.new.count}} new, + {{alerts.ongoing.count}} ongoing, and {{alerts.recovered.count}} + recovered alerts. + connector_type_id: .server-log + frequency: + summary: true + notify_when: onThrottleInterval + throttle: 1d + uuid: 53f3c2a3-e5d0-4cfa-af3b-6f0881385e78 + - group: recovered + id: fdbece50-406c-11ee-850e-c71febc4ca7f + params: + level: info + message: Recovered + connector_type_id: .server-log + frequency: + summary: false + notify_when: onActionGroupChange + throttle: null + uuid: 2324e45b-c0df-45c7-9d70-4993e30be758 + params: + thresholdComparator: '>' + timeWindowSize: 1 + timeWindowUnit: d + threshold: + - 100 + size: 100 + timeField: '@timestamp' + index: + - kibana_sample_data_logs + esQuery: '"""{"query":{"match_all" : {}}}"""' + excludeHitsFromPreviousRun: true + aggType: count + groupBy: all + searchType: esQuery + scheduled_task_id: 58148c70-407f-11ee-850e-c71febc4ca7f + created_by: elastic + updated_by: elastic + created_at: '2023-08-22T00:03:38.263Z' + updated_at: '2023-08-22T00:03:38.263Z' + api_key_owner: elastic + api_key_created_by_user: false + throttle: null + mute_all: false + notify_when: null + muted_alert_ids: [] + execution_status: + status: pending + last_execution_date: '2023-08-22T00:03:38.263Z' + revision: 0 + running: false + Alerting_create_es_query_kql_rule_response: + summary: >- + The create rule API returns a JSON object that contains details about + the rule. + value: + id: 7bd506d0-2284-11ee-8fad-6101956ced88 + enabled: true + name: my Elasticsearch query KQL rule" + tags: [] + rule_type_id: .es-query + consumer: alerts + schedule: + interval: 1m + actions: [] + params: + searchConfiguration: + query: + query: '""geo.src : "US" ""' + language: kuery + index: 90943e30-9a47-11e8-b64d-95841ca0b247 + searchType: searchSource + timeWindowSize: 5 + timeWindowUnit: m + threshold: + - 1000 + thresholdComparator: '>' + size: 100 + aggType: count + groupBy: all + excludeHitsFromPreviousRun: true + created_by: elastic + updated_by: elastic + created_at: '2023-07-14T20:24:50.729Z' + updated_at: '2023-07-14T20:24:50.729Z' + api_key_owner: elastic + api_key_created_by_user: false + throttle: null + notify_when: null + mute_all: false + muted_alert_ids: [] + scheduled_task_id: 7bd506d0-2284-11ee-8fad-6101956ced88 + execution_status: + status: pending + last_execution_date: '2023-07-14T20:24:50.729Z' + revision: 0 + running: false + Alerting_create_index_threshold_rule_response: + summary: >- + The create rule API returns a JSON object that contains details about + the rule. + value: + actions: + - group: threshold met + id: dceeb5d0-6b41-11eb-802b-85b0c1bc8ba2 + uuid: 07aef2a0-9eed-4ef9-94ec-39ba58eb609d + connector_type_id: .server-log + frequency: + notify_when: onActionGroupChange + summary: false + throttle: null + params: + level: info + message: >- + Rule {{rule.name}} is active for group {{context.group} : + + + - Value: {{context.value}} + + - Conditions Met: {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} + + - Timestamp: {{context.date}} + alert_delay: + active: 3 + api_key_created_by_user: false + api_key_owner: elastic + consumer: alerts + created_at: '2022-06-08T17:20:31.632Z' + created_by: elastic + enabled: true + execution_status: + last_execution_date: '2022-06-08T17:20:31.632Z' + status: pending + id: 41893910-6bca-11eb-9e0d-85d233e3ee35 + muted_alert_ids: [] + mute_all: false + name: my rule + notify_when: null + params: + aggType: avg + termSize: 6 + thresholdComparator: '>' + timeWindowSize: 5 + timeWindowUnit: m + groupBy: top + threshold: + - 1000 + index: + - .test-index + timeField: '@timestamp' + aggField: sheet.version + termField: name.keyword + revision: 0 + rule_type_id: .index-threshold + running: false + schedule: + interval: 1m + scheduled_task_id: 425b0800-6bca-11eb-9e0d-85d233e3ee35 + tags: + - cpu + throttle: null + updated_at: '2022-06-08T17:20:31.632Z' + updated_by: elastic + Alerting_create_tracking_containment_rule_response: + summary: >- + The create rule API returns a JSON object that contains details about + the rule. + value: + id: b6883f9d-5f70-4758-a66e-369d7c26012f + name: my tracking rule + tags: [] + enabled: true + consumer: alerts + throttle: null + revision: 1 + running: false + schedule: + interval: 1h + params: + index: kibana_sample_data_logs + dateField: '@timestamp' + geoField: geo.coordinates + entity: agent.keyword + boundaryType: entireIndex + boundaryIndexTitle: boundary* + boundaryGeoField: location + boundaryNameField: name + indexId: 90943e30-9a47-11e8-b64d-95841ca0b247 + boundaryIndexId: 0cd90abf-abe7-44c7-909a-f621bbbcfefc + rule_type_id: .geo-containment + created_by: elastic + updated_by: elastic + created_at: '2024-02-14T19:52:55.920Z' + updated_at: '2024-02-15T03:24:32.574Z' + api_key_owner: elastic + notify_when: null + mute_all: false + muted_alert_ids: [] + scheduled_task_id: b6883f9d-5f70-4758-a66e-369d7c26012f + execution_status: + status: ok + last_execution_date: '2024-02-15T03:25:38.125Z' + last_duration: 74 + actions: [] + last_run: + alerts_count: + active: 0 + new: 0 + recovered: 0 + ignored: 0 + outcome_msg: null + outcome_order: 0 + outcome: succeeded + warning: null + next_run: '2024-02-15T03:26:38.033Z' + api_key_created_by_user: false + Alerting_get_rule_response: + summary: >- + The get rule API returns a JSON object that contains details about the + rule. + value: + id: 31697a40-7b36-11ed-aa79-f742c05329b2 + consumer: alerts + tags: + - cpu + name: my alert + enabled: true + throttle: null + schedule: + interval: 1m + params: + aggType: avg + termSize: 6 + thresholdComparator: '>' + timeWindowSize: 5 + timeWindowUnit: m + groupBy: top + threshold: + - 1000 + index: + - test-index + timeField: '@timestamp' + aggField: sheet.version + termField: name.keyword + revision: 1 + rule_type_id: .index-threshold + created_by: elastic + updated_by: elastic + created_at: '2022-12-13T22:33:41.163Z' + updated_at: '2022-12-13T22:33:41.163Z' + api_key_owner: elastic + notify_when: null + muted_alert_ids: [] + mute_all: false + scheduled_task_id: 31697a40-7b36-11ed-aa79-f742c05329b2 + execution_status: + status: ok + last_execution_date: '2022-12-13T22:33:44.388Z' + last_duration: 83 + actions: + - group: threshold met + id: 1007a0c0-7a6e-11ed-89d5-abec321c0def + uuid: 1c7a1280-f28c-4e06-96b2-e4e5f05d1d61 + params: + level: info + message: >- + Rule {{rule.name}} is active for group {{context.group}}: + + + - Value: {{context.value}} + + - Conditions Met: {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} + + - Timestamp: {{context.date} + connector_type_id: .server-log + connector_type_id: .server-log + frequency: + throttle: null + summary: false + notify_when: onActionGroupChange + last_run: + alerts_count: + new: 0 + ignored: 0 + recovered: 0 + active: 0 + outcome_msg: null + warning: null + outcome: succeeded + next_run: '2022-12-13T22:34:44.314Z' + api_key_created_by_user: false + Alerting_update_rule_request: + summary: Update an index threshold rule. + value: + actions: + - frequency: + summary: false + notify_when: onActionGroupChange + group: threshold met + id: 96b668d0-a1b6-11ed-afdf-d39a49596974 + params: + level: info + message: >- + Rule {{rule.name}} is active for group {{context.group}}: + + + - Value: {{context.value}} + + - Conditions Met: {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} + + - Timestamp: {{context.date}} + params: + aggField: sheet.version + aggType: avg + index: + - .updated-index + groupBy: top + termField: name.keyword + termSize: 6 + threshold: + - 1000 + thresholdComparator: '>' + timeField: '@timestamp' + timeWindowSize: 5 + timeWindowUnit: m + name: new name + schedule: + interval: 1m + tags: [] + Alerting_update_rule_response: + summary: >- + The update rule API returns a JSON object that contains details about + the rule. + value: + id: ac4e6b90-6be7-11eb-ba0d-9b1c1f912d74 + consumer: alerts + tags: [] + name: new name + enabled: true + throttle: null + revision: 1 + running: false + schedule: + interval: 1m + params: + index: + - .updated-index + timeField: '@timestamp' + groupBy: top + aggType: avg + timeWindowSize: 5 + timeWindowUnit: m + thresholdComparator: '>' + threshold: + - 1000 + aggField: sheet.version + termField: name.keyword + termSize: 6 + api_key_owner: elastic + created_by: elastic + updated_by: elastic + rule_type_id: .index-threshold + scheduled_task_id: 4c5eda00-e74f-11ec-b72f-5b18752ff9ea + created_at: '2024-03-26T23:13:20.985Z' + updated_at: '2024-03-26T23:22:59.949Z' + mute_all: false + muted_alert_ids: [] + execution_status: + status: ok + last_execution_date: '2024-03-26T23:22:51.390Z' + last_duration: 52 + actions: + - group: threshold met + params: + level: info + message: >- + Rule {{rule.name}} is active for group {{context.group}}: + + + - Value: {{context.value}} + + - Conditions Met: {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} + + - Timestamp: {{context.date} + id: 96b668d0-a1b6-11ed-afdf-d39a49596974 + uuid: 07aef2a0-9eed-4ef9-94ec-39ba58eb609d + connector_type_id: .server-log + frequency: + summary: false + throttle: null + notify_when: onActionGroupChange + last_run: + alerts_count: + new: 0 + ignored: 0 + recovered: 0 + active: 0 + outcome_msg: null + warning: null + outcome: succeeded + next_run: '2024-03-26T23:23:51.316Z' + api_key_created_by_user: false + Alerting_find_rules_response: + summary: Retrieve information about a rule. + value: + page: 1 + total: 1 + per_page: 10 + data: + - id: 3583a470-74f6-11ed-9801-35303b735aef + consumer: alerts + tags: + - cpu + name: my alert + enabled: true + throttle: null + schedule: + interval: 1m + params: + aggType: avg + termSize: 6 + thresholdComparator: '>' + timeWindowSize: 5 + timeWindowUnit: m + groupBy: top + threshold: + - 1000 + index: + - test-index + timeField: '@timestamp' + aggField: sheet.version + termField: name.keyword + revision: 1 + rule_type_id: .index-threshold + created_by: elastic + updated_by: elastic + created_at: '2022-12-05T23:40:33.132Z' + updated_at: '2022-12-05T23:40:33.132Z' + api_key_owner: elastic + mute_all: false + muted_alert_ids: [] + scheduled_task_id: 3583a470-74f6-11ed-9801-35303b735aef + execution_status: + status: ok + last_execution_date: '2022-12-06T01:44:23.983Z' + last_duration: 48 + actions: + - id: 9dca3e00-74f5-11ed-9801-35303b735aef + group: threshold met + uuid: 1c7a1280-f28c-4e06-96b2-e4e5f05d1d61 + params: + level: info + message: >- + Rule {{rule.name}} is active for group {{context.group}}: + + + - Value: {{context.value}} + + - Conditions Met: {{context.conditions}} over + {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} + + - Timestamp: {{context.date}} + connector_type_id: .server-log + frequency: + summary: false + notify_when: onActionGroupChange + throttle: null + last_run: + alerts_count: + new: 0 + ignored: 0 + recovered: 0 + active: 0 + outcome_msg: null + warning: null + outcome: succeeded + next_run: '2022-12-06T01:45:23.912Z' + api_key_created_by_user: false + Alerting_find_rules_response_conditional_action: + summary: Retrieve information about a rule that has conditional actions. + value: + page: 1 + total: 1 + per_page: 10 + data: + - id: 6107a8f0-f401-11ed-9f8e-399c75a2deeb + name: security_rule + consumer: siem + enabled: true + tags: [] + throttle: null + revision: 1 + running: false + schedule: + interval: 1m + params: + author: [] + description: A security threshold rule. + ruleId: an_internal_rule_id + falsePositives: [] + from: now-3660s + immutable: false + license: '' + outputIndex: '' + meta: + from: 1h + kibana_siem_app_url: https://localhost:5601/app/security + maxSignals: 100 + riskScore: 21 + riskScoreMapping: [] + severity: low + severityMapping: [] + threat: [] + to: now + references: [] + version: 1 + exceptionsList: [] + type: threshold + language: kuery + index: + - kibana_sample_data_logs + query: '*' + filters: [] + threshold: + field: + - bytes + value: 1 + cardinality: [] + rule_type_id: siem.thresholdRule + created_by: elastic + updated_by: elastic + created_at: '2023-05-16T15:50:28.358Z' + updated_at: '2023-05-16T20:25:42.559Z' + api_key_owner: elastic + notify_when: null + mute_all: false + muted_alert_ids: [] + scheduled_task_id: 6107a8f0-f401-11ed-9f8e-399c75a2deeb + execution_status: + status: ok + last_execution_date: '2023-05-16T20:26:49.590Z' + last_duration: 166 + actions: + - group: default + id: 49eae970-f401-11ed-9f8e-399c75a2deeb + params: + documents: + - rule_id: + '[object Object]': null + rule_name: + '[object Object]': null + alert_id: + '[object Object]': null + context_message: + '[object Object]': null + connector_type_id: .index + frequency: + summary: true + notify_when: onActiveAlert + throttle: null + uuid: 1c7a1280-f28c-4e06-96b2-e4e5f05d1d61 + alerts_filter: + timeframe: + days: + - 7 + timezone: UTC + hours: + start: '08:00' + end: '17:00' + query: + kql: '' + filters: + - meta: + disabled: false + negate: false + alias: null + index: c4bdca79-e69e-4d80-82a1-e5192c621bea + key: client.geo.region_iso_code + field: client.geo.region_iso_code + params: + query: CA-QC + type: phrase + $state: + store: appState + query: + match_phrase: + client.geo.region_iso_code: CA-QC + last_run: + alerts_count: + new: 0 + ignored: 0 + recovered: 0 + active: 0 + outcome_msg: + - Rule execution completed successfully + outcome_order: 0 + warning: null + outcome: succeeded + next_run: '2023-05-16T20:27:49.507Z' + api_key_created_by_user: false + Alerting_get_health_response: + summary: Retrieve information about the health of the alerting framework. + value: + is_sufficiently_secure: true + has_permanent_encryption_key: true + alerting_framework_health: + decryption_health: + status: ok + timestamp: '2023-01-13T01:28:00.280Z' + execution_health: + status: ok + timestamp: '2023-01-13T01:28:00.280Z' + read_health: + status: ok + timestamp: '2023-01-13T01:28:00.280Z' + Alerting_get_rule_types_response: + summary: Retrieve rule types associated with Kibana machine learning features + value: + - id: xpack.ml.anomaly_detection_alert + name: Anomaly detection alert + category: management + producer: ml + alerts: + context: ml.anomaly-detection + mappings: + fieldMap: + kibana.alert.job_id: + type: keyword + array: false + required: true + kibana.alert.anomaly_score: + type: double + array: false + required: false + kibana.alert.is_interim: + type: boolean + array: false + required: false + kibana.alert.anomaly_timestamp: + type: date + array: false + required: false + kibana.alert.top_records: + type: object + array: true + required: false + dynamic: false + properties: + job_id: + type: keyword + record_score: + type: double + initial_record_score: + type: double + detector_index: + type: integer + is_interim: + type: boolean + timestamp: + type: date + partition_field_name: + type: keyword + partition_field_value: + type: keyword + over_field_name: + type: keyword + over_field_value: + type: keyword + by_field_name: + type: keyword + by_field_value: + type: keyword + function: + type: keyword + typical: + type: double + actual: + type: double + field_name: + type: keyword + kibana.alert.top_influencers: + type: object + array: true + required: false + dynamic: false + properties: + job_id: + type: keyword + influencer_field_name: + type: keyword + influencer_field_value: + type: keyword + influencer_score: + type: double + initial_influencer_score: + type: double + is_interim: + type: boolean + timestamp: + type: date + shouldWrite: true + enabled_in_license: true + recovery_action_group: + id: recovered + name: Recovered + action_groups: + - id: anomaly_score_match + name: Anomaly score matched the condition + - id: recovered + name: Recovered + default_action_group_id: anomaly_score_match + minimum_license_required: platinum + is_exportable: true + rule_task_timeout: 5m + action_variables: + context: + - name: timestamp + description: The bucket timestamp of the anomaly + - name: timestampIso8601 + description: The bucket time of the anomaly in ISO8601 format + - name: jobIds + description: List of job IDs that triggered the alert + - name: message + description: Alert info message + - name: isInterim + description: Indicate if top hits contain interim results + - name: score + description: Anomaly score at the time of the notification action + - name: topRecords + description: Top records + - name: topInfluencers + description: Top influencers + - name: anomalyExplorerUrl + description: URL to open in the Anomaly Explorer + useWithTripleBracesInTemplates: true + state: [] + params: [] + authorized_consumers: + alerts: + read: true + all: true + stackAlerts: + read: true + all: true + slo: + read: true + all: true + ml: + read: true + all: true + uptime: + read: true + all: true + infrastructure: + read: true + all: true + logs: + read: true + all: true + monitoring: + read: true + all: true + siem: + read: true + all: true + apm: + read: true + all: true + discover: + read: true + all: true + does_set_recovery_context: true + has_alerts_mappings: true + has_fields_for_a_a_d: false + - id: xpack.ml.anomaly_detection_jobs_health + name: Anomaly detection jobs health + category: management + producer: ml + enabled_in_license: true + recovery_action_group: + id: recovered + name: Recovered + action_groups: + - id: anomaly_detection_realtime_issue + name: Issue detected + - id: recovered + name: Recovered + default_action_group_id: anomaly_detection_realtime_issue + minimum_license_required: platinum + is_exportable: true + rule_task_timeout: 5m + action_variables: + context: + - name: results + description: Results of the rule execution + - name: message + description: Alert info message + state: [] + params: [] + authorized_consumers: + alerts: + read: true + all: true + stackAlerts: + read: true + all: true + slo: + read: true + all: true + ml: + read: true + all: true + uptime: + read: true + all: true + infrastructure: + read: true + all: true + logs: + read: true + all: true + monitoring: + read: true + all: true + siem: + read: true + all: true + apm: + read: true + all: true + discover: + read: true + all: true + does_set_recovery_context: true + has_alerts_mappings: false + has_fields_for_a_a_d: false Cases_create_case_request: summary: Create a security case that uses a Jira connector. value: @@ -15687,14 +22101,6 @@ components: schema: $ref: '#/components/schemas/Connectors_action_response_properties' securitySchemes: - Saved_objects_basicAuth: - type: http - scheme: basic - Saved_objects_apiKeyAuth: - type: apiKey - in: header - name: Authorization - description: 'e.g. Authorization: ApiKey base64AccessApiKey' Kibana_HTTP_APIs_apiKeyAuth: in: header name: Authorization @@ -15703,6 +22109,9 @@ components: scheme: basic type: http x-tagGroups: + - name: Alerting + tags: + - alerting - name: APM UI tags: - APM agent keys diff --git a/oas_docs/overlays/kibana.overlays.serverless.yaml b/oas_docs/overlays/kibana.overlays.serverless.yaml index 359d0d4bddac8..86a73d57c8561 100644 --- a/oas_docs/overlays/kibana.overlays.serverless.yaml +++ b/oas_docs/overlays/kibana.overlays.serverless.yaml @@ -4,6 +4,7 @@ info: title: Overlays for the Kibana API document version: 0.0.1 actions: + # Clean up server definitions - target: '$.servers.*' description: Remove all servers so we can add our own. remove: true @@ -14,6 +15,11 @@ actions: variables: kibana_url: default: localhost:5601 + # Remove operation-level security definitions + - target: "$.paths['/api/status']['get'].security" + description: Remove system security definitions + remove: true + # Add a document-level security definition - target: '$.components.securitySchemes' description: Add an API key security scheme update: @@ -27,4 +33,8 @@ actions: update: security: - apiKeyAuth: [] - + # Mark all operations as beta + - target: '$.paths[*][*]' + description: Add x-beta + update: + x-beta: true \ No newline at end of file diff --git a/oas_docs/overlays/kibana.overlays.yaml b/oas_docs/overlays/kibana.overlays.yaml index 7681a7201872a..d1acdf7712bf8 100644 --- a/oas_docs/overlays/kibana.overlays.yaml +++ b/oas_docs/overlays/kibana.overlays.yaml @@ -4,6 +4,7 @@ info: title: Overlays for the Kibana API document version: 0.0.1 actions: + # Clean up server definitions - target: '$.servers.*' description: Remove all servers so we can add our own. remove: true @@ -14,6 +15,11 @@ actions: variables: kibana_url: default: localhost:5601 + # Remove operation-level security definitions + - target: "$.paths['/api/status']['get'].security" + description: Remove system security definitions + remove: true + # Add document-level security definitions - target: '$.components.securitySchemes' description: Add an API key security scheme update: @@ -34,6 +40,7 @@ actions: security: - apiKeyAuth: [] - basicAuth: [] + # Add an introduction to spaces - target: '$' description: Add an extra page about spaces update: diff --git a/package.json b/package.json index 79b44d5663831..e76a42d2d68e3 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "resolutions": { "**/@bazel/typescript/protobufjs": "6.11.4", "**/@hello-pangea/dnd": "16.6.0", - "**/@langchain/core": "^0.2.17", + "**/@langchain/core": "^0.2.18", "**/@types/node": "20.10.5", "**/@typescript-eslint/utils": "5.62.0", "**/chokidar": "^3.5.3", @@ -88,7 +88,7 @@ "**/globule/minimatch": "^3.1.2", "**/hoist-non-react-statics": "^3.3.2", "**/isomorphic-fetch/node-fetch": "^2.6.7", - "**/langchain": "^0.2.10", + "**/langchain": "^0.2.11", "**/react-intl/**/@types/react": "^17.0.45", "**/remark-parse/trim": "1.0.1", "**/sharp": "0.32.6", @@ -110,6 +110,7 @@ "@elastic/apm-rum-react": "^2.0.3", "@elastic/charts": "66.1.0", "@elastic/datemath": "5.0.3", + "@elastic/ebt": "1.0.0", "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.14.0", "@elastic/ems-client": "8.5.3", @@ -180,6 +181,7 @@ "@kbn/apm-data-access-plugin": "link:x-pack/plugins/observability_solution/apm_data_access", "@kbn/apm-data-view": "link:packages/kbn-apm-data-view", "@kbn/apm-plugin": "link:x-pack/plugins/observability_solution/apm", + "@kbn/apm-types": "link:packages/kbn-apm-types", "@kbn/apm-utils": "link:packages/kbn-apm-utils", "@kbn/app-link-test-plugin": "link:test/plugin_functional/plugins/app_link_test", "@kbn/application-usage-test-plugin": "link:x-pack/test/usage_collection/plugins/application_usage_test", @@ -436,7 +438,6 @@ "@kbn/discover-utils": "link:packages/kbn-discover-utils", "@kbn/doc-links": "link:packages/kbn-doc-links", "@kbn/dom-drag-drop": "link:packages/kbn-dom-drag-drop", - "@kbn/ebt": "link:packages/analytics/ebt", "@kbn/ebt-tools": "link:packages/kbn-ebt-tools", "@kbn/ecs-data-quality-dashboard": "link:x-pack/packages/security-solution/ecs_data_quality_dashboard", "@kbn/ecs-data-quality-dashboard-plugin": "link:x-pack/plugins/ecs_data_quality_dashboard", @@ -949,9 +950,9 @@ "@kbn/zod": "link:packages/kbn-zod", "@kbn/zod-helpers": "link:packages/kbn-zod-helpers", "@langchain/community": "0.2.18", - "@langchain/core": "^0.2.17", + "@langchain/core": "^0.2.18", "@langchain/google-genai": "^0.0.23", - "@langchain/langgraph": "^0.0.29", + "@langchain/langgraph": "^0.0.31", "@langchain/openai": "^0.1.3", "@langtrase/trace-attributes": "^3.0.8", "@launchdarkly/node-server-sdk": "^9.4.7", @@ -1093,8 +1094,8 @@ "jsonwebtoken": "^9.0.2", "jsts": "^1.6.2", "kea": "^2.6.0", - "langchain": "^0.2.10", - "langsmith": "^0.1.37", + "langchain": "^0.2.11", + "langsmith": "^0.1.39", "launchdarkly-js-client-sdk": "^3.4.0", "launchdarkly-node-server-sdk": "^7.0.3", "load-json-file": "^6.2.0", @@ -1141,7 +1142,7 @@ "pretty-ms": "6.0.0", "prop-types": "^15.8.1", "proxy-from-env": "1.0.0", - "puppeteer": "22.8.1", + "puppeteer": "22.13.1", "query-string": "^6.13.2", "rbush": "^3.0.1", "re-resizable": "^6.9.9", @@ -1696,7 +1697,7 @@ "json5": "^2.2.3", "jsondiffpatch": "0.4.1", "license-checker": "^25.0.1", - "listr2": "^8.2.1", + "listr2": "^8.2.3", "lmdb": "^2.9.2", "loader-utils": "^2.0.4", "marge": "^1.0.1", @@ -1759,7 +1760,7 @@ "svgo": "^2.8.0", "table": "^6.8.1", "tape": "^5.0.1", - "terser": "^5.31.2", + "terser": "^5.31.3", "terser-webpack-plugin": "^4.2.3", "tough-cookie": "^4.1.4", "tree-kill": "^1.2.2", diff --git a/packages/analytics/ebt/README.md b/packages/analytics/ebt/README.md deleted file mode 100644 index 8758a90304cba..0000000000000 --- a/packages/analytics/ebt/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# @kbn/ebt/* - -This module implements the Analytics client used for Event-Based Telemetry. The intention of the client is to be usable on both: the UI and the Server sides. - -## Client - -`@kbn/ebt/client` holds the public APIs to report events, enrich the events' context and set up the transport mechanisms. Refer to the [client's docs](./client/README.md) for more information. - -## Prebuilt shippers - -Elastic-approved shippers are available as `@kbn/ebt/shippers/*` packages. Refer to the [shippers' docs](./shippers/README.md) for more information. diff --git a/packages/analytics/ebt/client/README.md b/packages/analytics/ebt/client/README.md deleted file mode 100644 index 508fc984c1a58..0000000000000 --- a/packages/analytics/ebt/client/README.md +++ /dev/null @@ -1,348 +0,0 @@ -# @kbn/ebt/client - -This module implements the Analytics client used for Event-Based Telemetry. The intention of the client is to be usable on both: the UI and the Server sides. - -## How to use it - -It all starts by creating the client with the `createAnalytics` API: - -```typescript -import { createAnalytics } from '@kbn/ebt/client'; - -const analytics = createAnalytics({ - // Set to `true` when running in developer mode. - // It enables development helpers like schema validation and extra debugging features. - isDev: false, - // Set to `staging` if you don't want your events to be sent to the production cluster. Useful for CI & QA environments. - sendTo: 'production', - // The application's instrumented logger - logger, -}); -``` - -### Reporting events - -Reporting events is as simple as calling the `reportEvent` API every time your application needs to track an event: - -```typescript -analytics.reportEvent('my_unique_event_name', myEventProperties); -``` - -But first, it requires a setup phase where the application must declare the event and the structure of the `eventProperties`: - -```typescript -analytics.registerEventType({ - eventType: 'my_unique_event_name', - schema: { - my_keyword: { - type: 'keyword', - _meta: { - description: 'Represents the key property...' - } - }, - my_number: { - type: 'long', - _meta: { - description: 'Indicates the number of times...', - optional: true - } - }, - my_complex_unknown_meta_object: { - type: 'pass_through', - _meta: { - description: 'Unknown object that contains the key-values...' - } - }, - my_array_of_str: { - type: 'array', - items: { - type: 'text', - _meta: { - description: 'List of tags...' - } - } - }, - my_object: { - properties: { - my_timestamp: { - type: 'date', - _meta: { - description: 'timestamp when the user...' - } - } - } - }, - my_array_of_objects: { - type: 'array', - items: { - properties: { - my_bool_prop: { - type: 'boolean', - _meta: { - description: '`true` when...' - } - } - } - } - } - } -}); -``` - -For more information about how to declare the schemas, refer to the section [Schema definition](#schema-definition). - -### Enriching events - -Context is important! For that reason, the client internally appends the timestamp in which the event was generated and any additional context provided by the Context Providers. To register a context provider use the `registerContextProvider` API: - -```typescript -analytics.registerContextProvider({ - name: 'my_context_provider', - // RxJS Observable that emits every time the context changes. For example: a License changes from `basic` to `trial`. - context$, - // Similar to the `reportEvent` API, schema defining the structure of the expected output of the context$ observable. - schema, -}) -``` - -### Setting the user's opt-in consent - -The client cannot send any data until the user provides consent. At the beginning, the client will internally enqueue any incoming events until the consent is either granted or refused. - -To set the user's selection use the `optIn` API: - -```typescript -analytics.optIn({ - global: { - enabled: true, // The user granted consent - shippers: { - shipperA: false, // Shipper A is explicitly disabled for all events - } - }, - event_types: { - my_unique_event_name: { - enabled: true, // The consent is explictly granted to send this type of event (only if global === true) - shippers: { - shipperB: false, // Shipper B is not allowed to report this event. - } - }, - my_other_event_name: { - enabled: false, // The consent is not granted to send this type of event. - } - } -}) -``` - -### Explicit flush of the events - -If, at any given point (usually testing or during shutdowns) we need to make sure that all the pending events -in the queue are sent. The `flush` API returns a promise that will resolve as soon as all events in the queue are sent. - -```typescript -await analytics.flush() -``` - -### Shipping events - -In order to report the event to an analytics tool, we need to register the shippers our application wants to use. To register a shipper use the API `registerShipper`: - -```typescript -analytics.registerShipper(ShipperClass, shipperOptions); -``` - -There are some prebuilt shippers in this package that can be enabled using the API above. Additionally, each application can register their own custom shippers. - -#### Prebuilt shippers - -Refer to the [shippers' documentation](../shippers/README.md) for more information. - -#### Custom shippers - -To use your own shipper, you just need to implement and register it!: - -```typescript -import type { - AnalyticsClientInitContext, - Event, - EventContext, - IShipper, - TelemetryCounter -} from '@kbn/ebt/client'; - -class MyVeryOwnShipper implements IShipper { - constructor(myOptions: MyOptions, initContext: AnalyticsClientInitContext) { - // ... - } - - public reportEvents(events: Event[]): void { - // Send the events to the analytics platform - } - public optIn(isOptedIn: boolean): void { - // Start/stop any sending mechanisms - } - - public extendContext(newContext: EventContext): void { - // Call any custom APIs to internally set the context - } - - // Emit any success/failed/dropped activity - public telemetryCounter$: Observable; -} - -// Register the custom shipper -analytics.registerShipper(MyVeryOwnShipper, myOptions); -``` - -### Schema definition - -Schemas are a framework that allows us to document the structure of the events that our application will report. It is useful to understand the meaning of the events that we report. And, at the same time, it serves as an extra validation step from the developer's point of view. - -The syntax of a schema is a _simplified ES mapping on steroids_: it removes some of the ES mapping complexity, and at the same time, it includes features that are specific to the telemetry collection. - -**DISCLAIMER:** **The schema is not a direct mapping to ES indices.** The final structure of how the event is stored will depend on many factors like the context providers, shippers and final analytics solution. - -#### Schema Specification: Primitive data types (`string`, `number`, `boolean`) - -When declaring primitive values like `string` or `number`, the basic schema must contain both: `type` and `_meta`. - -The `type` value depends on the type of the content to report in that field. Refer to the table below for the values allowed in the schema `type`: - -| Typescript `type` | Schema `type` | -|:-----------------:|:-----------------------:| -| `boolean` | `boolean` | -| `string` | `keyword` | -| `string` | `text` | -| `string` | `date` (for ISO format) | -| `number` | `date` (for ms format) | -| `number` | `byte` | -| `number` | `short` | -| `number` | `integer` | -| `number` | `long` | -| `number` | `double` | -| `number` | `float` | - -```typescript -const stringSchema: SchemaValue = { - type: 'text', - _meta: { - description: 'Description of the feature that was broken', - optional: false, - }, -} -``` - -For the `_meta`, refer to [Schema Specification: `_meta`](#schema-specification-_meta). - -#### Schema Specification: Objects - -Declaring the schema of an object contains 2 main attributes: `properties` and an optional `_meta`: - -The `properties` attribute is an object with all the keys that the original object may include: - -```typescript -interface MyObject { - an_id: string; - a_description: string; - a_number?: number; - a_boolean: boolean; -} - -const objectSchema: SchemaObject = { - properties: { - an_id: { - type: 'keyword', - _meta: { - description: 'The ID of the element that generated the event', - optional: false, - }, - }, - a_description: { - type: 'text', - _meta: { - description: 'The human readable description of the element that generated the event', - optional: false, - }, - }, - a_number: { - type: 'long', - _meta: { - description: 'The number of times the element is used', - optional: true, - }, - }, - a_boolean: { - type: 'boolean', - _meta: { - description: 'Is the element still active', - optional: false, - }, - }, - }, - _meta: { - description: 'MyObject represents the events generated by elements in the UI when ...', - optional: false, - } -} -``` - -For the optional `_meta`, refer to [Schema Specification: `_meta`](#schema-specification-_meta). - -#### Schema Specification: Arrays - -Declaring the schema of an array contains 2 main attributes: `items` and an optional `_meta`: - -The `items` attribute is an object declaring the schema of the elements inside the array. At the moment, we only support arrays of one type, so `Array` are not allowed. - -```typescript -type MyArray = string[]; - -const arraySchema: SchemaArray = { - items: { - type: 'keyword', - _meta: { - description: 'Tag attached to the element...', - optional: false, - }, - }, - _meta: { - description: 'List of tags attached to the element...', - optional: false, - } -} -``` - -For the optional `_meta`, refer to [Schema Specification: `_meta`](#schema-specification-_meta). - -#### Schema Specification: Special type `pass_through` - -In case a property in the schema is just used to pass through some unknown content that is declared and validated somewhere else, or that it can dynamically grow and shrink, you may use the `type: 'pass_through'` option. It behaves like a [first-order data type](#schema-specification-first-order-data-types-string-number-boolean): - -```typescript -type MyUnknownType = unknown; - -const passThroughSchema: SchemaValue = { - type: 'pass_through', - _meta: { - description: 'Payload context recevied from the HTTP request...', - optional: false, - }, -} -``` - -For the optional `_meta`, refer to [Schema Specification: `_meta`](#schema-specification-_meta). - -#### Schema Specification: `_meta` - -The `_meta` adds the invaluable information of a `description` and whether a field is `optional` in the payload. - -It can be attached to any schema definition as seen in the examples above. For high-order types, like arrays or objects, the `_meta` field is optional. For first-order types, like numbers, strings, booleans or `pass_through`, the `_meta` key is mandatory. - -The field `_meta.optional` is not required unless the schema is describing an optional field. In that case, `_meta.optional: true` is required. However, it's highly encouraged to be explicit about declaring it even when the described field is not optional. - -### Schema Validation - -Apart from documentation, the schema is used to validate the payload during the dev cycle. This adds an extra layer of confidence over the data to be sent. - -The validation, however, is disabled in production because users cannot do anything to fix the bug after it is released. Additionally, receiving _buggy_ events can be considered an additional insight into how our users use our products. For example, the buggy event can be caused by a user following an unexpected path in the UI like clicking an "Upload" button when the file has not been selected [#125013](https://github.com/elastic/kibana/issues/125013). In those cases, receiving the _incomplete_ event tells us the user didn't select a file, but they still hit the "Upload" button. - -The validation is performed with the `io-ts` library. In order to do that, the schema is firstly parsed into the `io-ts` equivalent, and then used to validate the event & context payloads. diff --git a/packages/analytics/ebt/client/index.ts b/packages/analytics/ebt/client/index.ts deleted file mode 100644 index 7127a21a5517e..0000000000000 --- a/packages/analytics/ebt/client/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { - AnalyticsClientInitContext, - IAnalyticsClient as AnalyticsClient, -} from './src/analytics_client'; -import { AnalyticsClient as AnalyticsClientClass } from './src/analytics_client'; - -/** - * Creates an {@link AnalyticsClient}. - * @param initContext The initial context to create the client {@link AnalyticsClientInitContext} - */ -export function createAnalytics(initContext: AnalyticsClientInitContext): AnalyticsClient { - return new AnalyticsClientClass(initContext); -} - -export type { - IAnalyticsClient as AnalyticsClient, - // Types for the constructor - AnalyticsClientInitContext, - // Types for the registerShipper API - ShipperClassConstructor, - RegisterShipperOpts, - // Types for the optIn API - OptInConfig, - OptInConfigPerType, - ShipperName, - // Types for the registerContextProvider API - ContextProviderOpts, - ContextProviderName, - // Types for the registerEventType API - EventTypeOpts, -} from './src/analytics_client'; - -export type { - Event, - EventContext, - EventType, - TelemetryCounter, - TelemetryCounterType, -} from './src/events'; - -export type { - RootSchema, - SchemaObject, - SchemaArray, - SchemaChildValue, - SchemaMeta, - SchemaValue, - SchemaMetaOptional, - PossibleSchemaTypes, - AllowedSchemaBooleanTypes, - AllowedSchemaNumberTypes, - AllowedSchemaStringTypes, - AllowedSchemaTypes, -} from './src/schema'; - -export type { IShipper } from './src/shippers'; diff --git a/packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts b/packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts deleted file mode 100644 index 0d72f003e77a6..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/analytics_client.test.ts +++ /dev/null @@ -1,1190 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -// eslint-disable-next-line max-classes-per-file -import { Subject, lastValueFrom, take, toArray } from 'rxjs'; -import type { MockedLogger } from '@kbn/logging-mocks'; -import { loggerMock } from '@kbn/logging-mocks'; -import { AnalyticsClient } from './analytics_client'; -import { shippersMock } from '../shippers/mocks'; -import type { TelemetryCounter } from '../events'; -import { ContextService } from './context_service'; - -describe('AnalyticsClient', () => { - let analyticsClient: AnalyticsClient; - let logger: MockedLogger; - - beforeEach(() => { - jest.useFakeTimers(); - logger = loggerMock.create(); - analyticsClient = new AnalyticsClient({ - logger, - isDev: true, - sendTo: 'staging', - }); - }); - - afterEach(async () => { - await analyticsClient.shutdown(); - jest.useRealTimers(); - }); - - describe('registerEventType', () => { - test('successfully registers a event type', () => { - analyticsClient.registerEventType({ - eventType: 'testEvent', - schema: { - a_field: { - type: 'keyword', - _meta: { - description: 'description of a_field', - }, - }, - }, - }); - }); - - test('cannot register the same event type twice', () => { - analyticsClient.registerEventType({ - eventType: 'testEvent', - schema: { - a_field: { - type: 'keyword', - _meta: { - description: 'description of a_field', - }, - }, - }, - }); - - expect(() => - analyticsClient.registerEventType({ - eventType: 'testEvent', - schema: { - b_field: { - type: 'date', - _meta: { - description: 'description of a_field', - }, - }, - }, - }) - ).toThrowErrorMatchingInlineSnapshot(`"Event Type \\"testEvent\\" is already registered."`); - }); - - test('it can be used after deconstruction of the client', () => { - const { registerEventType } = analyticsClient; - registerEventType({ - eventType: 'testEvent', - schema: { - a_field: { - type: 'keyword', - _meta: { - description: 'description of a_field', - }, - }, - }, - }); - }); - }); - - describe('reportEvent', () => { - test('fails to report an event type because it is not registered yet', () => { - expect(() => - analyticsClient.reportEvent('testEvent', { a_field: 'a' }) - ).toThrowErrorMatchingInlineSnapshot( - `"Attempted to report event type \\"testEvent\\", before registering it. Use the \\"registerEventType\\" API to register it."` - ); - }); - - test('fails to validate the event and throws', () => { - analyticsClient.registerEventType({ - eventType: 'testEvent', - schema: { - a_field: { - type: 'keyword', - _meta: { - description: 'description of a_field', - }, - }, - }, - }); - analyticsClient.optIn({ global: { enabled: true } }); - - expect( - () => analyticsClient.reportEvent('testEvent', { a_field: 100 }) // a_field is expected to be a string - ).toThrowErrorMatchingInlineSnapshot(` - "Failed to validate payload coming from \\"Event Type 'testEvent'\\": - - [a_field]: {\\"expected\\":\\"string\\",\\"actual\\":\\"number\\",\\"value\\":100}" - `); - }); - - test('enqueues multiple events before specifying the optIn consent and registering a shipper', async () => { - analyticsClient.registerEventType({ - eventType: 'testEvent', - schema: { - a_field: { - type: 'keyword', - _meta: { - description: 'description of a_field', - }, - }, - }, - }); - - const internalQueuePromise = lastValueFrom( - // eslint-disable-next-line dot-notation - analyticsClient['internalEventQueue$'].pipe(take(3), toArray()) - ); - - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(3), toArray()) - ); - - analyticsClient.reportEvent('testEvent', { a_field: 'a' }); - analyticsClient.reportEvent('testEvent', { a_field: 'b' }); - analyticsClient.reportEvent('testEvent', { a_field: 'c' }); - - // Expect 3 enqueued testEvent, but not shipped - const eventCounters = await telemetryCounterPromise; - expect(eventCounters).toHaveLength(3); - eventCounters.forEach((eventCounter) => { - expect(eventCounter).toEqual({ - type: 'enqueued', - source: 'client', - event_type: 'testEvent', - code: 'enqueued', - count: 1, - }); - }); - - // The events went to the internal queue because there are no optIn nor shippers specified yet - const enqueuedEvents = await internalQueuePromise; - expect(enqueuedEvents).toEqual([ - { - context: {}, - event_type: 'testEvent', - properties: { a_field: 'a' }, - timestamp: expect.any(String), - }, - { - context: {}, - event_type: 'testEvent', - properties: { a_field: 'b' }, - timestamp: expect.any(String), - }, - { - context: {}, - event_type: 'testEvent', - properties: { a_field: 'c' }, - timestamp: expect.any(String), - }, - ]); - }); - - test('it can be used after deconstruction of the client', () => { - const { registerEventType, reportEvent } = analyticsClient; - registerEventType({ - eventType: 'testEvent', - schema: { - a_field: { - type: 'keyword', - _meta: { - description: 'description of a_field', - }, - }, - }, - }); - reportEvent('testEvent', { a_field: 'a' }); - }); - - test('Handles errors coming from the shipper.reportEvents API', () => { - const { optIn, registerEventType, registerShipper, reportEvent } = analyticsClient; - const reportEventsMock = jest.fn().mockImplementation(() => { - throw new Error('Something went terribly wrong'); - }); - class MockedShipper extends shippersMock.MockedShipper { - reportEvents = reportEventsMock; - } - optIn({ global: { enabled: true } }); - registerShipper(MockedShipper, {}); - registerEventType({ eventType: 'testEvent', schema: {} }); - reportEvent('testEvent', {}); - expect(reportEventsMock).toHaveBeenCalledWith([ - { - timestamp: expect.any(String), - event_type: 'testEvent', - properties: {}, - context: {}, - }, - ]); - expect(logger.warn).toHaveBeenCalledWith( - `Failed to report event "testEvent" via shipper "${MockedShipper.shipperName}"`, - expect.any(Error) - ); - }); - }); - - describe('registerShipper', () => { - test('Registers a global shipper', () => { - // eslint-disable-next-line dot-notation - expect(analyticsClient['shippersRegistry'].allShippers.size).toBe(0); - analyticsClient.registerShipper(shippersMock.MockedShipper, {}); - - // eslint-disable-next-line dot-notation - expect(analyticsClient['shippersRegistry'].allShippers.size).toBe(1); - - expect( - // eslint-disable-next-line dot-notation - analyticsClient['shippersRegistry'].allShippers.get(shippersMock.MockedShipper.shipperName) - ).toBeTruthy(); - }); - - test('Fails to register the same global shipper twice', () => { - analyticsClient.registerShipper(shippersMock.MockedShipper, {}); - expect(() => - analyticsClient.registerShipper(shippersMock.MockedShipper, {}) - ).toThrowErrorMatchingInlineSnapshot(`"Shipper \\"mocked-shipper\\" is already registered"`); - }); - - test('Registers an event exclusive shipper', () => { - analyticsClient.registerShipper( - shippersMock.MockedShipper, - {}, - { exclusiveEventTypes: ['eventA', 'eventB'] } - ); - - // eslint-disable-next-line dot-notation - expect(analyticsClient['shippersRegistry'].allShippers.size).toBe(1); - - // eslint-disable-next-line dot-notation - expect(analyticsClient['shippersRegistry'].getShippersForEventType('eventA').size).toBe(1); - // eslint-disable-next-line dot-notation - expect(analyticsClient['shippersRegistry'].getShippersForEventType('eventB').size).toBe(1); - // eslint-disable-next-line dot-notation - expect(analyticsClient['shippersRegistry'].getShippersForEventType('eventC').size).toBe(0); - }); - - test('Forwards the telemetryCounter$ events from the shipper, overwriting the `source` property', async () => { - class MockedShipper extends shippersMock.MockedShipper { - constructor({ telemetryCounter$ }: { telemetryCounter$: Subject }) { - super(); - this.telemetryCounter$ = telemetryCounter$; - } - } - - const mockTelemetryCounter$ = new Subject(); - - // Typescript also helps with the config type inference <3 - analyticsClient.registerShipper(MockedShipper, { telemetryCounter$: mockTelemetryCounter$ }); - - const counterEventPromise = lastValueFrom(analyticsClient.telemetryCounter$.pipe(take(1))); - - const counter: TelemetryCounter = { - type: 'succeeded', - source: 'a random value', - event_type: 'eventTypeA', - code: '200', - count: 1000, - }; - - mockTelemetryCounter$.next(counter); - - await expect(counterEventPromise).resolves.toEqual({ - ...counter, - source: MockedShipper.shipperName, - }); - }); - - class MockedShipper extends shippersMock.MockedShipper { - constructor({ - optInMock, - extendContextMock, - shutdownMock, - }: { - optInMock?: jest.Mock; - extendContextMock?: jest.Mock; - shutdownMock?: jest.Mock; - }) { - super(); - if (optInMock) this.optIn = optInMock; - if (extendContextMock) this.extendContext = extendContextMock; - if (shutdownMock) this.shutdown = shutdownMock; - } - } - - test('Registers a shipper and sets the opt-in status if the opt-in status was previously set', () => { - // Call the optIn method before registering the shipper - analyticsClient.optIn({ global: { enabled: true } }); - - const optIn = jest.fn(); - analyticsClient.registerShipper(MockedShipper, { optInMock: optIn }); - expect(optIn).toHaveBeenCalledWith(true); - }); - - test('Registers a shipper and spreads the opt-in status changes', () => { - const optIn = jest.fn(); - analyticsClient.registerShipper(MockedShipper, { optInMock: optIn }); - expect(optIn).not.toHaveBeenCalled(); - - // Call the optIn method after registering the shipper - analyticsClient.optIn({ global: { enabled: true } }); - expect(optIn).toHaveBeenCalledWith(true); - }); - - test('Spreads the context updates to the shipper (only after opt-in)', async () => { - const extendContextMock = jest.fn(); - analyticsClient.registerShipper(MockedShipper, { extendContextMock }); - expect(extendContextMock).toHaveBeenCalledTimes(0); // Not until we have opt-in - analyticsClient.optIn({ global: { enabled: true } }); - await jest.advanceTimersByTimeAsync(10); - expect(extendContextMock).toHaveBeenCalledWith({}); // The initial context - - const context$ = new Subject<{ a_field: boolean }>(); - analyticsClient.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - context$.next({ a_field: true }); - expect(extendContextMock).toHaveBeenCalledWith({ a_field: true }); // After update - }); - - test('Does not spread the context if opt-in === false', async () => { - const extendContextMock = jest.fn(); - analyticsClient.registerShipper(MockedShipper, { extendContextMock }); - expect(extendContextMock).toHaveBeenCalledTimes(0); // Not until we have opt-in - analyticsClient.optIn({ global: { enabled: false } }); - await jest.advanceTimersByTimeAsync(10); - expect(extendContextMock).toHaveBeenCalledTimes(0); // Not until we have opt-in - }); - - test('Handles errors in the shipper', async () => { - const optInMock = jest.fn().mockImplementation(() => { - throw new Error('Something went terribly wrong'); - }); - const extendContextMock = jest.fn().mockImplementation(() => { - throw new Error('Something went terribly wrong'); - }); - const shutdownMock = jest.fn().mockImplementation(() => { - throw new Error('Something went terribly wrong'); - }); - analyticsClient.registerShipper(MockedShipper, { - optInMock, - extendContextMock, - shutdownMock, - }); - expect(() => analyticsClient.optIn({ global: { enabled: true } })).not.toThrow(); - await jest.advanceTimersByTimeAsync(10); - expect(optInMock).toHaveBeenCalledWith(true); - expect(extendContextMock).toHaveBeenCalledWith({}); // The initial context - expect(logger.warn).toHaveBeenCalledWith( - `Shipper "${MockedShipper.shipperName}" failed to extend the context`, - expect.any(Error) - ); - await expect(analyticsClient.shutdown()).resolves.toBeUndefined(); - expect(shutdownMock).toHaveBeenCalled(); - }); - }); - - describe('ContextProvider APIs', () => { - let contextService: ContextService; - - beforeEach(() => { - // eslint-disable-next-line dot-notation - contextService = analyticsClient['contextService']; - }); - - test('Registers a context provider', () => { - const registerContextProviderSpy = jest.spyOn(contextService, 'registerContextProvider'); - const context$ = new Subject<{ a_field: boolean }>(); - analyticsClient.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - expect(registerContextProviderSpy).toHaveBeenCalledTimes(1); - expect(registerContextProviderSpy).toHaveBeenCalledWith({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - }); - - test('Removes a context provider', () => { - const removeContextProviderSpy = jest.spyOn(contextService, 'removeContextProvider'); - analyticsClient.removeContextProvider('contextProviderA'); - expect(removeContextProviderSpy).toHaveBeenCalledTimes(1); - expect(removeContextProviderSpy).toHaveBeenCalledWith('contextProviderA'); - }); - }); - - describe('optIn', () => { - let optInMock1: jest.Mock; - let optInMock2: jest.Mock; - - beforeEach(() => { - optInMock1 = jest.fn(); - - class MockedShipper1 extends shippersMock.MockedShipper { - static shipperName = 'mocked-shipper-1'; - optIn = optInMock1; - } - optInMock2 = jest.fn(); - class MockedShipper2 extends shippersMock.MockedShipper { - static shipperName = 'mocked-shipper-2'; - optIn = optInMock2; - } - - analyticsClient.registerShipper(MockedShipper1, {}); - analyticsClient.registerShipper(MockedShipper2, {}); - }); - - test('Updates global optIn config', () => { - // eslint-disable-next-line dot-notation - expect(analyticsClient['optInConfig$'].value).toBeUndefined(); - - analyticsClient.optIn({ global: { enabled: true } }); - // eslint-disable-next-line dot-notation - expect(analyticsClient['optInConfig$'].value!['optInConfig']).toEqual({ - global: { enabled: true }, - }); - }); - - test('Updates each shipper optIn config for global opt-in: true', () => { - analyticsClient.optIn({ global: { enabled: true } }); - expect(optInMock1).toHaveBeenCalledWith(true); - expect(optInMock2).toHaveBeenCalledWith(true); - }); - - test('Updates each shipper optIn config for global opt-in: false', () => { - analyticsClient.optIn({ global: { enabled: false } }); - expect(optInMock1).toHaveBeenCalledWith(false); - expect(optInMock2).toHaveBeenCalledWith(false); - }); - - test('Updates each shipper optIn config for global opt-in: true && shipper-specific: true', () => { - analyticsClient.optIn({ - global: { enabled: true, shippers: { ['mocked-shipper-1']: true } }, - }); - expect(optInMock1).toHaveBeenCalledWith(true); // Using global and shipper-specific - expect(optInMock2).toHaveBeenCalledWith(true); // Using only global - }); - - test('Updates each shipper optIn config for global opt-in: true && shipper-specific: false', () => { - analyticsClient.optIn({ - global: { enabled: true, shippers: { ['mocked-shipper-1']: false } }, - }); - expect(optInMock1).toHaveBeenCalledWith(false); // Using global and shipper-specific - expect(optInMock2).toHaveBeenCalledWith(true); // Using only global - }); - - test('Updates each shipper optIn config for global opt-in: false && shipper-specific: true', () => { - analyticsClient.optIn({ - global: { enabled: false, shippers: { ['mocked-shipper-1']: true } }, - }); - expect(optInMock1).toHaveBeenCalledWith(false); // Using global and shipper-specific - expect(optInMock2).toHaveBeenCalledWith(false); // Using only global - }); - - test('Updates each shipper optIn config for global opt-in: false && shipper-specific: false', () => { - analyticsClient.optIn({ - global: { enabled: false, shippers: { ['mocked-shipper-1']: false } }, - }); - expect(optInMock1).toHaveBeenCalledWith(false); // Using global and shipper-specific - expect(optInMock2).toHaveBeenCalledWith(false); // Using only global - }); - - test('Catches error in the shipper.optIn method', () => { - optInMock1.mockImplementation(() => { - throw new Error('Something went terribly wrong'); - }); - analyticsClient.optIn({ global: { enabled: true } }); - expect(optInMock1).toHaveBeenCalledWith(true); // Using global and shipper-specific - expect(optInMock2).toHaveBeenCalledWith(true); // Using only global - expect(logger.warn).toHaveBeenCalledWith( - 'Failed to set isOptedIn:true in shipper mocked-shipper-1', - expect.any(Error) - ); - }); - }); - - describe('E2E', () => { - class MockedShipper1 extends shippersMock.MockedShipper { - static shipperName = 'mocked-shipper-1'; - constructor({ reportEventsMock }: { reportEventsMock: jest.Mock }) { - super(); - this.reportEvents = reportEventsMock; - } - } - - class MockedShipper2 extends MockedShipper1 { - static shipperName = 'mocked-shipper-2'; - } - - beforeEach(() => { - analyticsClient.registerEventType({ - eventType: 'event-type-a', - schema: { - a_field: { - type: 'keyword', - _meta: { - description: 'description of a_field', - }, - }, - }, - }); - analyticsClient.registerEventType({ - eventType: 'event-type-b', - schema: { - b_field: { - type: 'long', - _meta: { - description: 'description of b_field', - }, - }, - }, - }); - }); - - test('Enqueues early events', async () => { - // eslint-disable-next-line dot-notation - const internalEventQueue$ = analyticsClient['internalEventQueue$']; - - const internalQueuePromise = lastValueFrom(internalEventQueue$.pipe(take(2), toArray())); - - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(2), toArray()) - ); - - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - - // Expect 2 enqueued testEvent, but not shipped - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - ]); - - // The events went to the internal queue because there are no optIn nor shippers specified yet - await expect(internalQueuePromise).resolves.toEqual([ - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'a' }, - timestamp: expect.any(String), - }, - { - context: {}, - event_type: 'event-type-b', - properties: { b_field: 100 }, - timestamp: expect.any(String), - }, - ]); - }); - - test('Sends events from the internal queue when there are shippers and an opt-in response is true', async () => { - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(3 + 2), toArray()) // Waiting for 3 enqueued + 2 batch-shipped events - ); - - // Send multiple events of 1 type to test the grouping logic as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - // As proven in the previous test, the events are still enqueued. - // Let's register a shipper and opt-in to test the dequeue logic. - const reportEventsMock = jest.fn(); - analyticsClient.registerShipper(MockedShipper1, { reportEventsMock }); - analyticsClient.optIn({ global: { enabled: true } }); - await jest.advanceTimersByTimeAsync(10); - - expect(reportEventsMock).toHaveBeenCalledTimes(2); - expect(reportEventsMock).toHaveBeenNthCalledWith(1, [ - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'a' }, - timestamp: expect.any(String), - }, - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'b' }, - timestamp: expect.any(String), - }, - ]); - expect(reportEventsMock).toHaveBeenNthCalledWith(2, [ - { - context: {}, - event_type: 'event-type-b', - properties: { b_field: 100 }, - timestamp: expect.any(String), - }, - ]); - - // Expect 3 enqueued events, and 2 sent_to_shipper batched requests - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-a', - code: 'OK', - count: 2, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-b', - code: 'OK', - count: 1, - }, - ]); - }); - - test('Discards events from the internal queue when there are shippers and an opt-in response is false', async () => { - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(4), toArray()) // Waiting for 4 enqueued - ); - - // Send multiple events of 1 type to test the grouping logic as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - const reportEventsMock = jest.fn(); - analyticsClient.registerShipper(MockedShipper1, { reportEventsMock }); - analyticsClient.optIn({ global: { enabled: false } }); - - // Report event after opted-out - analyticsClient.reportEvent('event-type-a', { a_field: 'c' }); - - expect(reportEventsMock).toHaveBeenCalledTimes(0); - - // Expect 4 enqueued, but not shipped - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - ]); - - // eslint-disable-next-line dot-notation - expect(analyticsClient['internalEventQueue$'].observed).toBe(false); - }); - - test('Discards events from the internal queue when there are no shippers and an opt-in response is false', async () => { - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(4), toArray()) // Waiting for 4 enqueued - ); - - // Send multiple events of 1 type to test the grouping logic as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - analyticsClient.optIn({ global: { enabled: false } }); - - // Report event after opted-out - analyticsClient.reportEvent('event-type-a', { a_field: 'c' }); - - // Expect 4 enqueued, but not shipped - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - ]); - - // eslint-disable-next-line dot-notation - expect(analyticsClient['internalEventQueue$'].observed).toBe(false); - }); - - test('Discards only one type of the enqueued events based on event_type config', async () => { - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(3 + 1), toArray()) // Waiting for 3 enqueued + 1 batch-shipped events - ); - - // Send multiple events of 1 type to test the grouping logic as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - const reportEventsMock = jest.fn(); - analyticsClient.registerShipper(MockedShipper1, { reportEventsMock }); - analyticsClient.optIn({ - global: { enabled: true }, - event_types: { ['event-type-a']: { enabled: false } }, - }); - await jest.advanceTimersByTimeAsync(10); - - expect(reportEventsMock).toHaveBeenCalledTimes(1); - expect(reportEventsMock).toHaveBeenNthCalledWith(1, [ - { - context: {}, - event_type: 'event-type-b', - properties: { b_field: 100 }, - timestamp: expect.any(String), - }, - ]); - - // Expect 3 enqueued events, and 1 sent_to_shipper batched request - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-b', - code: 'OK', - count: 1, - }, - ]); - }); - - test('Discards the event at the shipper level (for a specific event)', async () => { - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(3 + 2), toArray()) // Waiting for 3 enqueued + 2 batch-shipped events - ); - - // Send multiple events of 1 type to test the grouping logic as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - // Register 2 shippers and set 1 of them as disabled for event-type-a - const reportEventsMock1 = jest.fn(); - const reportEventsMock2 = jest.fn(); - analyticsClient.registerShipper(MockedShipper1, { reportEventsMock: reportEventsMock1 }); - analyticsClient.registerShipper(MockedShipper2, { reportEventsMock: reportEventsMock2 }); - analyticsClient.optIn({ - global: { enabled: true }, - event_types: { - ['event-type-a']: { enabled: true, shippers: { [MockedShipper2.shipperName]: false } }, - }, - }); - await jest.advanceTimersByTimeAsync(10); - - expect(reportEventsMock1).toHaveBeenCalledTimes(2); - expect(reportEventsMock1).toHaveBeenNthCalledWith(1, [ - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'a' }, - timestamp: expect.any(String), - }, - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'b' }, - timestamp: expect.any(String), - }, - ]); - expect(reportEventsMock1).toHaveBeenNthCalledWith(2, [ - { - context: {}, - event_type: 'event-type-b', - properties: { b_field: 100 }, - timestamp: expect.any(String), - }, - ]); - expect(reportEventsMock2).toHaveBeenCalledTimes(1); - expect(reportEventsMock2).toHaveBeenNthCalledWith(1, [ - { - context: {}, - event_type: 'event-type-b', - properties: { b_field: 100 }, - timestamp: expect.any(String), - }, - ]); - - // Expect 3 enqueued events, and 2 sent_to_shipper batched requests - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-a', - code: 'OK', - count: 2, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-b', - code: 'OK', - count: 1, - }, - ]); - }); - - test('Discards all the events at the shipper level (globally disabled)', async () => { - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(3 + 2), toArray()) // Waiting for 3 enqueued + 2 batch-shipped events - ); - - // Send multiple events of 1 type to test the grouping logic as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - // Register 2 shippers and set 1 of them as globally disabled - const reportEventsMock1 = jest.fn(); - const reportEventsMock2 = jest.fn(); - analyticsClient.registerShipper(MockedShipper1, { reportEventsMock: reportEventsMock1 }); - analyticsClient.registerShipper(MockedShipper2, { reportEventsMock: reportEventsMock2 }); - analyticsClient.optIn({ - global: { enabled: true, shippers: { [MockedShipper2.shipperName]: false } }, - event_types: { - ['event-type-a']: { enabled: true }, - }, - }); - await jest.advanceTimersByTimeAsync(10); - - expect(reportEventsMock1).toHaveBeenCalledTimes(2); - expect(reportEventsMock1).toHaveBeenNthCalledWith(1, [ - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'a' }, - timestamp: expect.any(String), - }, - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'b' }, - timestamp: expect.any(String), - }, - ]); - expect(reportEventsMock1).toHaveBeenNthCalledWith(2, [ - { - context: {}, - event_type: 'event-type-b', - properties: { b_field: 100 }, - timestamp: expect.any(String), - }, - ]); - expect(reportEventsMock2).toHaveBeenCalledTimes(0); - - // Expect 3 enqueued events, and 2 sent_to_shipper batched requests - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-a', - code: 'OK', - count: 2, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-b', - code: 'OK', - count: 1, - }, - ]); - }); - - test('Discards incoming events when opt-in response is false', async () => { - // Set OptIn and shipper first to test the "once-set up" scenario - const reportEventsMock = jest.fn(); - analyticsClient.registerShipper(MockedShipper1, { reportEventsMock }); - analyticsClient.optIn({ global: { enabled: false } }); - - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(3), toArray()) // Waiting for 3 enqueued - ); - - // Send multiple events of 1 type to test the non-grouping logic at this stage as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - expect(reportEventsMock).toHaveBeenCalledTimes(0); - - // Expect 2 enqueued, but not shipped - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - ]); - }); - - test('Forwards incoming events to the shippers when opt-in response is true', async () => { - // Set OptIn and shipper first to test the "once-set up" scenario - const reportEventsMock = jest.fn(); - analyticsClient.registerShipper(MockedShipper1, { reportEventsMock }); - analyticsClient.optIn({ global: { enabled: true } }); - - const telemetryCounterPromise = lastValueFrom( - analyticsClient.telemetryCounter$.pipe(take(3 * 2), toArray()) // Waiting for 2 events per each reportEvent call: enqueued and sent_to_shipper - ); - - // Send multiple events of 1 type to test the non-grouping logic at this stage as well - analyticsClient.reportEvent('event-type-a', { a_field: 'a' }); - analyticsClient.reportEvent('event-type-b', { b_field: 100 }); - analyticsClient.reportEvent('event-type-a', { a_field: 'b' }); - - // This time the reportEvent API is called once per event (no grouping/batching applied at this stage) - expect(reportEventsMock).toHaveBeenCalledTimes(3); - expect(reportEventsMock).toHaveBeenNthCalledWith(1, [ - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'a' }, - timestamp: expect.any(String), - }, - ]); - expect(reportEventsMock).toHaveBeenNthCalledWith(2, [ - { - context: {}, - event_type: 'event-type-b', - properties: { b_field: 100 }, - timestamp: expect.any(String), - }, - ]); - expect(reportEventsMock).toHaveBeenNthCalledWith(3, [ - { - context: {}, - event_type: 'event-type-a', - properties: { a_field: 'b' }, - timestamp: expect.any(String), - }, - ]); - - // Expect 2 enqueued, but not shipped - await expect(telemetryCounterPromise).resolves.toEqual([ - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-a', - code: 'OK', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-b', - code: 'enqueued', - count: 1, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-b', - code: 'OK', - count: 1, - }, - { - type: 'enqueued', - source: 'client', - event_type: 'event-type-a', - code: 'enqueued', - count: 1, - }, - { - type: 'sent_to_shipper', - source: 'client', - event_type: 'event-type-a', - code: 'OK', - count: 1, - }, - ]); - }); - }); -}); diff --git a/packages/analytics/ebt/client/src/analytics_client/analytics_client.ts b/packages/analytics/ebt/client/src/analytics_client/analytics_client.ts deleted file mode 100644 index 52521ecde95de..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/analytics_client.ts +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { Mixed } from 'io-ts'; -import type { Observable } from 'rxjs'; -import { BehaviorSubject, Subject, combineLatest, from, merge } from 'rxjs'; -import { - buffer, - bufferCount, - concatMap, - delay, - filter, - groupBy, - map, - mergeMap, - share, - shareReplay, - skipWhile, - takeUntil, - tap, -} from 'rxjs'; -import type { LogMeta } from '@kbn/logging'; -import type { IShipper } from '../shippers'; -import type { - AnalyticsClientInitContext, - ContextProviderName, - ContextProviderOpts, - EventTypeOpts, - IAnalyticsClient, - OptInConfig, - RegisterShipperOpts, - ShipperClassConstructor, -} from './types'; -import type { Event, EventContext, EventType, TelemetryCounter } from '../events'; -import { ShippersRegistry } from './shippers_registry'; -import { OptInConfigService } from './opt_in_config'; -import { ContextService } from './context_service'; -import { schemaToIoTs, validateSchema } from '../schema/validation'; - -interface EventDebugLogMeta extends LogMeta { - ebt_event: Event; -} - -export class AnalyticsClient implements IAnalyticsClient { - private readonly internalTelemetryCounter$ = new Subject(); - public readonly telemetryCounter$: Observable = - this.internalTelemetryCounter$.pipe(share()); // Using `share` so we can have multiple subscribers - /** - * This queue holds all the events until both conditions occur: - * 1. We know the user's optIn decision. - * 2. We have, at least, one registered shipper. - * @private - */ - private readonly internalEventQueue$ = new Subject(); - private readonly shippersRegistry = new ShippersRegistry(); - /** - * Observable used to report when a shipper is registered. - * @private - */ - private readonly shipperRegistered$ = new Subject(); - private readonly eventTypeRegistry = new Map< - EventType, - EventTypeOpts & { validator?: Mixed } - >(); - private readonly contextService: ContextService; - private readonly context$ = new BehaviorSubject>({}); - private readonly optInConfig$ = new BehaviorSubject(undefined); - private readonly optInConfigWithReplay$ = this.optInConfig$.pipe( - filter((optInConfig): optInConfig is OptInConfigService => typeof optInConfig !== 'undefined'), - shareReplay(1) - ); - private readonly contextWithReplay$ = this.context$.pipe( - skipWhile(() => !this.optInConfig$.value), // Do not forward the context events until we have an optInConfig value - shareReplay(1) - ); - - constructor(private readonly initContext: AnalyticsClientInitContext) { - this.contextService = new ContextService( - this.context$, - this.initContext.isDev, - this.initContext.logger.get('context-service') - ); - this.reportEnqueuedEventsWhenClientIsReady(); - } - - public reportEvent = ( - eventType: EventType, - eventData: EventTypeData - ) => { - // Fetch the timestamp as soon as we receive the event. - const timestamp = new Date().toISOString(); - - this.internalTelemetryCounter$.next({ - type: 'enqueued', - source: 'client', - event_type: eventType, - code: 'enqueued', - count: 1, - }); - - const eventTypeOpts = this.eventTypeRegistry.get(eventType); - if (!eventTypeOpts) { - this.internalTelemetryCounter$.next({ - type: 'dropped', - source: 'client', - event_type: eventType, - code: 'UnregisteredType', - count: 1, - }); - throw new Error( - `Attempted to report event type "${eventType}", before registering it. Use the "registerEventType" API to register it.` - ); - } - - // If the validator is registered (dev-mode only), perform the validation. - if (eventTypeOpts.validator) { - validateSchema( - `Event Type '${eventType}'`, - eventTypeOpts.validator, - eventData - ); - } - - const event: Event = { - timestamp, - event_type: eventType, - context: this.context$.value, - properties: eventData as unknown as Record, - }; - - this.initContext.logger.debug(`Report event "${eventType}"`, { - ebt_event: event, - }); - - const optInConfig = this.optInConfig$.value; - - if (optInConfig?.isEventTypeOptedIn(eventType) === false) { - // If opted out, skip early - return; - } - - if (typeof optInConfig === 'undefined') { - // If the opt-in config is not provided yet, we need to enqueue the event to an internal queue - this.internalEventQueue$.next(event); - } else { - this.sendToShipper(eventType, [event]); - } - }; - - public registerEventType = (eventTypeOps: EventTypeOpts) => { - if (this.eventTypeRegistry.get(eventTypeOps.eventType)) { - throw new Error(`Event Type "${eventTypeOps.eventType}" is already registered.`); - } - - this.eventTypeRegistry.set(eventTypeOps.eventType, { - ...eventTypeOps, - validator: this.initContext.isDev ? schemaToIoTs(eventTypeOps.schema) : undefined, - }); - }; - - public optIn = (optInConfig: OptInConfig) => { - const optInConfigInstance = new OptInConfigService(optInConfig); - this.optInConfig$.next(optInConfigInstance); - }; - - public registerContextProvider = (contextProviderOpts: ContextProviderOpts) => { - this.contextService.registerContextProvider(contextProviderOpts); - }; - - public removeContextProvider = (name: ContextProviderName) => { - this.contextService.removeContextProvider(name); - }; - - public registerShipper = ( - ShipperClass: ShipperClassConstructor, - shipperConfig: ShipperConfig, - { exclusiveEventTypes = [] }: RegisterShipperOpts = {} - ) => { - const shipperName = ShipperClass.shipperName; - const shipper = new ShipperClass(shipperConfig, { - ...this.initContext, - logger: this.initContext.logger.get('shipper', shipperName), - }); - if (exclusiveEventTypes.length) { - // This feature is not intended to be supported in the MVP. - // I can remove it if we think it causes more bad than good. - exclusiveEventTypes.forEach((eventType) => { - this.shippersRegistry.addEventExclusiveShipper(eventType, shipperName, shipper); - }); - } else { - this.shippersRegistry.addGlobalShipper(shipperName, shipper); - } - - // Subscribe to the shipper's telemetryCounter$ and pass it over to the client's-level observable - shipper.telemetryCounter$?.subscribe((counter) => - this.internalTelemetryCounter$.next({ - ...counter, - source: shipperName, // Enforce the shipper's name in the `source` - }) - ); - - // Spread the optIn configuration updates - this.optInConfigWithReplay$.subscribe((optInConfig) => { - const isOptedIn = optInConfig.isShipperOptedIn(shipperName); - try { - shipper.optIn(isOptedIn); - } catch (err) { - this.initContext.logger.warn( - `Failed to set isOptedIn:${isOptedIn} in shipper ${shipperName}`, - err - ); - } - }); - - // Spread the global context if it has custom extendContext method - if (shipper.extendContext) { - this.contextWithReplay$.subscribe((context) => { - try { - shipper.extendContext!(context); - } catch (err) { - this.initContext.logger.warn( - `Shipper "${shipperName}" failed to extend the context`, - err - ); - } - }); - } - - // Notify that a shipper is registered - this.shipperRegistered$.next(); - }; - - public flush = async () => { - await Promise.all( - [...this.shippersRegistry.allShippers.entries()].map(async ([shipperName, shipper]) => { - try { - await shipper.flush(); - } catch (err) { - this.initContext.logger.warn(`Failed to flush shipper "${shipperName}"`, err); - } - }) - ); - }; - - public shutdown = async () => { - await this.flush(); - this.shippersRegistry.allShippers.forEach((shipper, shipperName) => { - try { - shipper.shutdown(); - } catch (err) { - this.initContext.logger.warn(`Failed to shutdown shipper "${shipperName}"`, err); - } - }); - this.internalEventQueue$.complete(); - this.internalTelemetryCounter$.complete(); - this.shipperRegistered$.complete(); - this.optInConfig$.complete(); - this.context$.complete(); - }; - - /** - * Forwards the `events` to the registered shippers, bearing in mind if the shipper is opted-in for that eventType. - * @param eventType The event type's name - * @param events A bulk array of events matching the eventType. - * @private - */ - private sendToShipper(eventType: EventType, events: Event[]) { - let sentToShipper = false; - this.shippersRegistry.getShippersForEventType(eventType).forEach((shipper, shipperName) => { - const isShipperOptedIn = this.optInConfig$.value?.isShipperOptedIn(shipperName, eventType); - - // Only send it to the non-explicitly opted-out shippers - if (isShipperOptedIn) { - sentToShipper = true; - try { - shipper.reportEvents(events); - } catch (err) { - this.initContext.logger.warn( - `Failed to report event "${eventType}" via shipper "${shipperName}"`, - err - ); - } - } - }); - if (sentToShipper) { - this.internalTelemetryCounter$.next({ - type: 'sent_to_shipper', - source: 'client', - event_type: eventType, - code: 'OK', - count: events.length, - }); - } - } - - /** - * Once the client is ready (it has a valid optInConfig and at least one shipper), - * flush any early events and ship them or discard them based on the optInConfig. - * @private - */ - private reportEnqueuedEventsWhenClientIsReady() { - // Observer that will emit when both events occur: the OptInConfig is set + a shipper has been registered - const configReceivedAndShipperReceivedObserver$ = combineLatest([ - this.optInConfigWithReplay$, - merge([ - this.shipperRegistered$, - // Merging shipperRegistered$ with the optInConfigWithReplay$ when optedIn is false, so that we don't need to wait for the shipper if opted-in === false - this.optInConfigWithReplay$.pipe(filter((cfg) => cfg?.isOptedIn() === false)), - ]), - ]); - - // Flush the internal queue when we get any optInConfig and, at least, 1 shipper - this.internalEventQueue$ - .pipe( - // Take until will close the observer once we reach the condition below - takeUntil(configReceivedAndShipperReceivedObserver$), - - // Accumulate the events until we can send them - buffer(configReceivedAndShipperReceivedObserver$), - - // Minimal delay only to make this chain async and let the optIn operation to complete first. - delay(0), - - // Re-emit the context to make sure all the shippers got it (only if opted-in) - tap(() => { - if (this.optInConfig$.value?.isOptedIn()) { - this.context$.next(this.context$.value); - } - }), - - // Minimal delay only to make this chain async and let - // the context update operation to complete first. - delay(0), - - // Flatten the array of events - concatMap((events) => from(events)), - - // Discard opted-out events - filter((event) => this.optInConfig$.value?.isEventTypeOptedIn(event.event_type) === true), - - // Let's group the requests per eventType for easier batching - groupBy((event) => event.event_type), - mergeMap((groupedObservable) => - groupedObservable.pipe( - bufferCount(1000), // Batching up-to 1000 events per event type for backpressure reasons - map((events) => ({ eventType: groupedObservable.key, events })) - ) - ) - ) - .subscribe(({ eventType, events }) => { - this.sendToShipper(eventType, events); - }); - } -} diff --git a/packages/analytics/ebt/client/src/analytics_client/context_service.test.ts b/packages/analytics/ebt/client/src/analytics_client/context_service.test.ts deleted file mode 100644 index e2b3f69b844f1..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/context_service.test.ts +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { loggerMock, type MockedLogger } from '@kbn/logging-mocks'; -import { BehaviorSubject, firstValueFrom, lastValueFrom, Subject, take, toArray } from 'rxjs'; -import type { EventContext } from '../events'; -import { ContextService } from './context_service'; - -describe('ContextService', () => { - let globalContext$: Subject>; - let contextService: ContextService; - let logger: MockedLogger; - - beforeEach(() => { - globalContext$ = new BehaviorSubject>({}); - logger = loggerMock.create(); - contextService = new ContextService(globalContext$, true, logger); - }); - - test('Registers a context provider', async () => { - const context$ = new Subject<{ a_field: boolean }>(); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - const globalContextPromise = lastValueFrom(globalContext$.pipe(take(2), toArray())); - context$.next({ a_field: true }); - await expect(globalContextPromise).resolves.toEqual([ - {}, // Original empty state - { a_field: true }, - ]); - }); - - test('It does not break if context emits `undefined`', async () => { - contextService = new ContextService( - globalContext$, - false, // setting to `false` so the validation piece of logic does not kick in. - logger - ); - - const context$ = new Subject<{ a_field: boolean } | undefined | void>(); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - const globalContextPromise = lastValueFrom(globalContext$.pipe(take(3), toArray())); - context$.next(); - context$.next(undefined); - await expect(globalContextPromise).resolves.toEqual([ - {}, // Original empty state - {}, - {}, - ]); - }); - - test('It does not break for BehaviourSubjects (emitting as soon as they connect)', async () => { - const context$ = new BehaviorSubject<{ a_field: boolean }>({ a_field: true }); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - const globalContextPromise = lastValueFrom(globalContext$.pipe(take(1), toArray())); - await expect(globalContextPromise).resolves.toEqual([ - { a_field: true }, // No original empty state - ]); - }); - - test('Merges all the contexts together', async () => { - const contextA$ = new Subject<{ a_field: boolean }>(); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$: contextA$, - }); - - const contextB$ = new Subject<{ a_field?: boolean; b_field: number }>(); - contextService.registerContextProvider({ - name: 'contextProviderB', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - optional: true, - }, - }, - b_field: { - type: 'long', - _meta: { - description: 'b_field description', - }, - }, - }, - context$: contextB$, - }); - - const globalContextPromise = lastValueFrom(globalContext$.pipe(take(6), toArray())); - contextA$.next({ a_field: true }); - contextB$.next({ b_field: 1 }); - contextB$.next({ a_field: false, b_field: 1 }); - contextA$.next({ a_field: true }); - contextB$.next({ b_field: 2 }); - await expect(globalContextPromise).resolves.toEqual([ - {}, // Original empty state - { a_field: true }, - { a_field: true, b_field: 1 }, // Merged A & B - { a_field: false, b_field: 1 }, // a_field updated from B - { a_field: false, b_field: 1 }, // a_field still from B because it was registered later. - // We may want to change this last behaviour in the future but, for now, it's fine. - { a_field: true, b_field: 2 }, // a_field is now taken from A because B is not providing it yet. - ]); - }); - - test('The global context is not polluted by context providers removing reported fields', async () => { - const context$ = new Subject<{ a_field?: boolean; b_field: number }>(); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - optional: true, - }, - }, - b_field: { - type: 'long', - _meta: { - description: 'b_field description', - }, - }, - }, - context$, - }); - - const globalContextPromise = lastValueFrom(globalContext$.pipe(take(6), toArray())); - context$.next({ b_field: 1 }); - context$.next({ a_field: false, b_field: 1 }); - context$.next({ a_field: true, b_field: 1 }); - context$.next({ b_field: 1 }); - context$.next({ a_field: true, b_field: 2 }); - await expect(globalContextPromise).resolves.toEqual([ - {}, // Original empty state - { b_field: 1 }, - { a_field: false, b_field: 1 }, - { a_field: true, b_field: 1 }, - { b_field: 1 }, // a_field is removed because the context provider removed it. - { a_field: true, b_field: 2 }, - ]); - }); - - test('The undefined values are not forwarded to the global context', async () => { - const context$ = new Subject<{ a_field?: boolean; b_field: number }>(); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - optional: true, - }, - }, - b_field: { - type: 'long', - _meta: { - description: 'b_field description', - }, - }, - }, - context$, - }); - - const globalContextPromise = firstValueFrom(globalContext$.pipe(take(6), toArray())); - context$.next({ b_field: 1 }); - context$.next({ a_field: false, b_field: 1 }); - context$.next({ a_field: true, b_field: 1 }); - context$.next({ b_field: 1 }); - context$.next({ a_field: undefined, b_field: 2 }); - await expect(globalContextPromise).resolves.toEqual([ - {}, // Original empty state - { b_field: 1 }, - { a_field: false, b_field: 1 }, - { a_field: true, b_field: 1 }, - { b_field: 1 }, // a_field is removed because the context provider removed it. - { b_field: 2 }, // a_field is not forwarded because it is `undefined` - ]); - }); - - test('Fails to register 2 context providers with the same name', () => { - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$: new Subject<{ a_field: boolean }>(), - }); - expect(() => { - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$: new Subject<{ a_field: boolean }>(), - }); - }).toThrowErrorMatchingInlineSnapshot( - `"Context provider with name 'contextProviderA' already registered"` - ); - }); - - test('Does not remove the context provider after it completes', async () => { - const context$ = new Subject<{ a_field: boolean }>(); - - // eslint-disable-next-line dot-notation - const contextProvidersRegistry = contextService['contextProvidersRegistry']; - - // The context registry is empty - expect(contextProvidersRegistry.size).toBe(0); - - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - const globalContextPromise = lastValueFrom(globalContext$.pipe(take(4), toArray())); - context$.next({ a_field: true }); - // The size of the registry grows on the first emission - expect(contextProvidersRegistry.size).toBe(1); - - context$.next({ a_field: true }); - // Still in the registry - expect(contextProvidersRegistry.size).toBe(1); - context$.complete(); - // Still in the registry - expect(contextProvidersRegistry.size).toBe(1); - contextService.removeContextProvider('contextProviderA'); - // The context provider is removed from the registry - expect(contextProvidersRegistry.size).toBe(0); - await expect(globalContextPromise).resolves.toEqual([ - {}, // Original empty state - { a_field: true }, - { a_field: true }, - {}, - ]); - }); - - test('validates the input and logs the error if invalid', () => { - const context$ = new Subject<{ a_field: boolean } | undefined>(); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - context$.next(undefined); - expect(logger.error).toHaveBeenCalledTimes(1); - expect((logger.error.mock.calls[0][0] as Error).message).toContain( - `Failed to validate payload coming from "Context Provider 'contextProviderA'"` - ); - }); - - test('it does not stop the subscription after an error', async () => { - const context$ = new Subject<{ a_field: boolean } | undefined>(); - contextService.registerContextProvider({ - name: 'contextProviderA', - schema: { - a_field: { - type: 'boolean', - _meta: { - description: 'a_field description', - }, - }, - }, - context$, - }); - - const globalContextPromise = lastValueFrom(globalContext$.pipe(take(2), toArray())); - context$.next({ a_field: '123' as unknown as boolean }); // cause the error - expect(logger.error).toHaveBeenCalledTimes(1); - expect((logger.error.mock.calls[0][0] as Error).message).toContain( - `Failed to validate payload coming from "Context Provider 'contextProviderA'"` - ); - context$.next({ a_field: true }); // send a good one - await expect(globalContextPromise).resolves.toEqual([ - {}, // Original empty state - { a_field: true }, // 2nd emission (the errored one does not spread) - ]); - }); -}); diff --git a/packages/analytics/ebt/client/src/analytics_client/context_service.ts b/packages/analytics/ebt/client/src/analytics_client/context_service.ts deleted file mode 100644 index 490aea84aeb39..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/context_service.ts +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { Subject, Subscription } from 'rxjs'; -import { filter } from 'rxjs'; -import type { Logger } from '@kbn/logging'; -import type { EventContext } from '../events'; -import type { ContextProviderName, ContextProviderOpts } from './types'; -import { schemaToIoTs, validateSchema } from '../schema/validation'; - -export class ContextService { - private readonly contextProvidersRegistry = new Map(); - private readonly contextProvidersSubscriptions = new Map(); - - constructor( - private readonly context$: Subject>, - private readonly isDevMode: boolean, - private readonly logger: Logger - ) {} - - /** - * Registers a context provider, and subscribes to any updates from it. - * @param contextProviderOpts The options to register the context provider {@link ContextProviderOpts} - */ - public registerContextProvider({ - name, - context$, - schema, - }: ContextProviderOpts) { - if (this.contextProvidersSubscriptions.has(name)) { - throw new Error(`Context provider with name '${name}' already registered`); - } - - // Declare the validator only in dev-mode - const validator = this.isDevMode ? schemaToIoTs(schema) : undefined; - - const subscription = context$ - .pipe( - filter((context) => { - if (validator) { - try { - validateSchema( - `Context Provider '${name}'`, - validator, - context as Record - ); - } catch (validationError) { - this.logger.error(validationError); - return false; - } - } - return true; - }) - ) - .subscribe((context) => { - // We store each context linked to the context provider, so they can increase and reduce - // the number of fields they report without having left-overs in the global context. - this.contextProvidersRegistry.set(name, context); - - // For every context change, we rebuild the global context. - // It's better to do it here than to rebuild it for every reportEvent. - this.updateGlobalContext(); - }); - - this.contextProvidersSubscriptions.set(name, subscription); - } - - /** - * Removes the context provider from the registry, unsubscribes from it, and rebuilds the global context. - * @param name The name of the context provider to remove. - */ - public removeContextProvider(name: ContextProviderName) { - this.contextProvidersSubscriptions.get(name)?.unsubscribe(); - this.contextProvidersRegistry.delete(name); - this.updateGlobalContext(); - } - - /** - * Loops through all the context providers and sets the global context - * @private - */ - private updateGlobalContext() { - this.context$.next( - [...this.contextProvidersRegistry.values()].reduce((acc: Partial, context) => { - return { - ...acc, - ...this.removeEmptyValues(context), - }; - }, {} as Partial) - ); - } - - private removeEmptyValues(context: unknown) { - if (!isObject(context)) { - return {}; - } - return Object.keys(context).reduce((acc, key) => { - if (context[key] !== undefined) { - acc[key] = context[key]; - } - return acc; - }, {} as Partial); - } -} - -function isObject(value: unknown): value is Record { - return typeof value === 'object' && value !== null; -} diff --git a/packages/analytics/ebt/client/src/analytics_client/index.ts b/packages/analytics/ebt/client/src/analytics_client/index.ts deleted file mode 100644 index 77c4c8ce6fa16..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export type { - IAnalyticsClient, - // Types for the constructor - AnalyticsClientInitContext, - // Types for the registerShipper API - ShipperClassConstructor, - RegisterShipperOpts, - // Types for the optIn API - OptInConfig, - OptInConfigPerType, - ShipperName, - // Types for the registerContextProvider API - ContextProviderOpts, - ContextProviderName, - // Types for the registerEventType API - EventTypeOpts, -} from './types'; - -export { AnalyticsClient } from './analytics_client'; diff --git a/packages/analytics/ebt/client/src/analytics_client/mocks.ts b/packages/analytics/ebt/client/src/analytics_client/mocks.ts deleted file mode 100644 index d09bfa67dee82..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/mocks.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { Subject } from 'rxjs'; -import type { IAnalyticsClient } from './types'; - -function createMockedAnalyticsClient(): jest.Mocked { - return { - optIn: jest.fn(), - reportEvent: jest.fn(), - registerEventType: jest.fn(), - registerContextProvider: jest.fn(), - removeContextProvider: jest.fn(), - registerShipper: jest.fn(), - telemetryCounter$: new Subject(), - flush: jest.fn(), - shutdown: jest.fn(), - }; -} - -export const analyticsClientMock = { - create: createMockedAnalyticsClient, -}; diff --git a/packages/analytics/ebt/client/src/analytics_client/opt_in_config.test.ts b/packages/analytics/ebt/client/src/analytics_client/opt_in_config.test.ts deleted file mode 100644 index 8c34d79086a3c..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/opt_in_config.test.ts +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { OptInConfigService } from './opt_in_config'; - -describe('OptInConfigService', () => { - describe('isOptedIn', () => { - test('Returns `true` when `global.enabled: true`', () => { - const config = new OptInConfigService({ global: { enabled: true } }); - expect(config.isOptedIn()).toBe(true); - }); - - test('Returns `false` when `global.enabled: false`', () => { - const config = new OptInConfigService({ global: { enabled: false } }); - expect(config.isOptedIn()).toBe(false); - }); - }); - - describe('isEventTypeOptedIn', () => { - test('Returns `true` when `global.enabled: true` and no eventType specific config is provided', () => { - const config = new OptInConfigService({ global: { enabled: true } }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(true); - }); - - test('Returns `false` when `global.enabled: false` and no eventType specific config is provided', () => { - const config = new OptInConfigService({ global: { enabled: false } }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(false); - }); - - test('Returns `true` when `global.enabled: true` and event_type config exists but not for the requested eventType', () => { - const config = new OptInConfigService({ - global: { enabled: true }, - event_types: { - 'test-event-2': { enabled: true }, - 'test-event-3': { enabled: false }, - }, - }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(true); - }); - - test('Returns `false` when `global.enabled: false` and event_type config exists but not for the requested eventType', () => { - const config = new OptInConfigService({ - global: { enabled: false }, - event_types: { - 'test-event-2': { enabled: true }, - 'test-event-3': { enabled: false }, - }, - }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(false); - }); - - test('Returns `true` when `global.enabled: true` and event_type config exists and it is `true`', () => { - const config = new OptInConfigService({ - global: { enabled: true }, - event_types: { - 'test-event-1': { enabled: true }, - }, - }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(true); - }); - - test('Returns `false` when `global.enabled: false` and event_type config exists and it is `true`', () => { - const config = new OptInConfigService({ - global: { enabled: false }, - event_types: { - 'test-event-1': { enabled: true }, - }, - }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(false); - }); - - test('Returns `false` when `global.enabled: true` and event_type config exists and it is `false`', () => { - const config = new OptInConfigService({ - global: { enabled: true }, - event_types: { - 'test-event-1': { enabled: false }, - }, - }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(false); - }); - - test('Returns `false` when `global.enabled: false` and event_type config exists and it is `false`', () => { - const config = new OptInConfigService({ - global: { enabled: false }, - event_types: { - 'test-event-1': { enabled: false }, - }, - }); - expect(config.isEventTypeOptedIn('test-event-1')).toBe(false); - }); - }); - describe('isShipperOptedIn', () => { - test('Returns `true` when `global.enabled: true` and no shipper specific config is provided', () => { - const config = new OptInConfigService({ global: { enabled: true } }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(true); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(true); - }); - - test('Returns `false` when `global.enabled: false` and no shipper specific config is provided', () => { - const config = new OptInConfigService({ global: { enabled: false } }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(false); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - test('Returns `true` when `global.enabled: true` and shipper config exists but not for the requested eventType', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-2': true, - 'test-shipper-3': false, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(true); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(true); - }); - - test('Returns `false` when `global.enabled: false` and shipper config exists but not for the requested eventType', () => { - const config = new OptInConfigService({ - global: { - enabled: false, - shippers: { - 'test-shipper-2': true, - 'test-shipper-3': false, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(false); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - test('Returns `true` when `global.enabled: true` and shipper config exists and it is `true`', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(true); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(true); - }); - - test('Returns `false` when `global.enabled: false` and shipper config exists and it is `true`', () => { - const config = new OptInConfigService({ - global: { - enabled: false, - shippers: { - 'test-shipper-1': true, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(false); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - test('Returns `false` when `global.enabled: true` and shipper config exists and it is `false`', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': false, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(false); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - test('Returns `false` when `global.enabled: false` and shipper config exists and it is `false`', () => { - const config = new OptInConfigService({ - global: { - enabled: false, - shippers: { - 'test-shipper-1': false, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1')).toBe(false); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - describe('with event_type config', () => { - test('Returns `true` when `global.enabled: true`, `shipper: true` and `event: true` (no `event.shippers`)', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - event_types: { - 'test-event-1': { - enabled: true, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(true); - }); - - test('Returns `true` when `global.enabled: true`, `shipper: true`, `event: true` (`event.shippers` exists but for others)', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - event_types: { - 'test-event-1': { - enabled: true, - shippers: { - 'test-shipper-2': false, - }, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(true); - }); - - test('Returns `true` when `global.enabled: true`, `shipper: true`, `event: true` (`event.shipper: true`)', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - event_types: { - 'test-event-1': { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(true); - }); - - test('Returns `false` when `global.enabled: false`, `shipper: true`, `event: true` (`event.shipper: true`)', () => { - const config = new OptInConfigService({ - global: { - enabled: false, - shippers: { - 'test-shipper-1': true, - }, - }, - event_types: { - 'test-event-1': { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - test('Returns `false` when `global.enabled: true`, `shipper: false`, `event: true` (`event.shipper: true`)', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': false, - }, - }, - event_types: { - 'test-event-1': { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - test('Returns `false` when `global.enabled: true`, `shipper: true`, `event: false` (`event.shipper: true`)', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - event_types: { - 'test-event-1': { - enabled: false, - shippers: { - 'test-shipper-1': true, - }, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - - test('Returns `false` when `global.enabled: true`, `shipper: true`, `event: true` (`event.shipper: false`)', () => { - const config = new OptInConfigService({ - global: { - enabled: true, - shippers: { - 'test-shipper-1': true, - }, - }, - event_types: { - 'test-event-1': { - enabled: true, - shippers: { - 'test-shipper-1': false, - }, - }, - }, - }); - expect(config.isShipperOptedIn('test-shipper-1', 'test-event-1')).toBe(false); - }); - }); - }); -}); diff --git a/packages/analytics/ebt/client/src/analytics_client/opt_in_config.ts b/packages/analytics/ebt/client/src/analytics_client/opt_in_config.ts deleted file mode 100644 index 6fece8b8e2a8f..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/opt_in_config.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { OptInConfig, ShipperName } from './types'; -import type { EventType } from '../events'; - -export class OptInConfigService { - constructor(private readonly optInConfig: OptInConfig) {} - - /** - * Is globally opted in? - */ - public isOptedIn(): boolean { - return this.optInConfig.global.enabled; - } - - /** - * Is the given event type opted in? - * @param eventType the event type to check - */ - public isEventTypeOptedIn(eventType: EventType): boolean { - if (!this.isOptedIn()) { - return false; - } - // In case of not provided a specific eventType consent, we assume opted-in - const isEventTypeOptedIn = - (this.optInConfig.event_types && this.optInConfig.event_types[eventType]?.enabled) ?? true; - - return isEventTypeOptedIn; - } - - /** - * Is the given shipper opted in? - * @param shipperName the shipper to check - * @param eventType the event type to check for the shipper - */ - public isShipperOptedIn(shipperName: ShipperName, eventType?: EventType): boolean { - if (!this.isOptedIn()) { - return false; - } - - // In case of not provided a specific shipper consent, we assume opted-in - const isShipperGloballyOptedIn: boolean = - (this.optInConfig.global.shippers && this.optInConfig.global.shippers[shipperName]) ?? true; - - if (!isShipperGloballyOptedIn) { - return false; - } - - if (eventType) { - if (!this.isEventTypeOptedIn(eventType)) { - return false; - } - - const eventTypeOptInConfig = - this.optInConfig.event_types && this.optInConfig.event_types[eventType]; - // In case of not provided a specific eventType-level shipper consent, we assume opted-in - const isEventTypeShipperOptedIn: boolean = - (eventTypeOptInConfig?.shippers && eventTypeOptInConfig.shippers[shipperName]) ?? true; - - return isEventTypeShipperOptedIn; - } else { - return isShipperGloballyOptedIn; - } - } -} diff --git a/packages/analytics/ebt/client/src/analytics_client/shippers_registry.test.ts b/packages/analytics/ebt/client/src/analytics_client/shippers_registry.test.ts deleted file mode 100644 index 9fbb4c308f56c..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/shippers_registry.test.ts +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { ShippersRegistry } from './shippers_registry'; -import { shippersMock } from '../shippers/mocks'; - -describe('ShippersRegistry', () => { - let shippersRegistry: ShippersRegistry; - - beforeEach(() => { - shippersRegistry = new ShippersRegistry(); - }); - - describe('Global Shippers', () => { - test('adds a shipper without an error', () => { - const shipper = shippersMock.createShipper(); - expect(shippersRegistry.allShippers.size).toBe(0); - shippersRegistry.addGlobalShipper('testShipper', shipper); - expect(shippersRegistry.allShippers.size).toBe(1); - }); - - test('fails to add the same shipper name twice (even when the shipper implementation is different)', () => { - const shipper1 = shippersMock.createShipper(); - const shipper2 = shippersMock.createShipper(); - shippersRegistry.addGlobalShipper('testShipper', shipper1); - expect(() => - shippersRegistry.addGlobalShipper('testShipper', shipper2) - ).toThrowErrorMatchingInlineSnapshot(`"Shipper \\"testShipper\\" is already registered"`); - }); - - test('adds multiple shippers with different names (even when the shipper implementation is the same)', () => { - const shipper = shippersMock.createShipper(); // Explicitly testing with the same shipper implementation - - expect(shippersRegistry.allShippers.size).toBe(0); - shippersRegistry.addGlobalShipper('testShipper1', shipper); - expect(shippersRegistry.allShippers.size).toBe(1); - shippersRegistry.addGlobalShipper('testShipper2', shipper); - expect(shippersRegistry.allShippers.size).toBe(2); - }); - - test('returns a global shipper if there is no event-type specific shipper', () => { - const shipper = shippersMock.createShipper(); - const shipperName = 'testShipper'; - expect(shippersRegistry.allShippers.size).toBe(0); - shippersRegistry.addGlobalShipper(shipperName, shipper); - expect(shippersRegistry.allShippers.size).toBe(1); - - const shippersForEventType = shippersRegistry.getShippersForEventType( - `RandomEvent${Date.now()}` - ); - // eslint-disable-next-line dot-notation - expect(shippersForEventType).toBe(shippersRegistry['globalShippers']); - expect(shippersForEventType.size).toBe(1); - expect(shippersForEventType.get(shipperName)).toBe(shipper); - }); - }); - - describe('Event-Exclusive Shippers', () => { - test('adds a shipper without an error', () => { - const shipper = shippersMock.createShipper(); - expect(shippersRegistry.allShippers.size).toBe(0); - shippersRegistry.addEventExclusiveShipper('testEvent', 'testShipper', shipper); - expect(shippersRegistry.allShippers.size).toBe(1); - }); - - test('fails to add the same shipper name twice (even when the shipper implementation is different)', () => { - const shipper1 = shippersMock.createShipper(); - const shipper2 = shippersMock.createShipper(); - shippersRegistry.addEventExclusiveShipper('testEvent', 'testShipper', shipper1); - expect(() => - shippersRegistry.addEventExclusiveShipper('testEvent', 'testShipper', shipper2) - ).toThrowErrorMatchingInlineSnapshot( - `"testShipper is already registered for event-type testEvent"` - ); - }); - - test('adds multiple shippers with different names (even when the shipper implementation is the same)', () => { - const shipper = shippersMock.createShipper(); // Explicitly testing with the same shipper implementation - - expect(shippersRegistry.allShippers.size).toBe(0); - shippersRegistry.addEventExclusiveShipper('testEvent', 'testShipper1', shipper); - expect(shippersRegistry.allShippers.size).toBe(1); - shippersRegistry.addEventExclusiveShipper('testEvent', 'testShipper2', shipper); - expect(shippersRegistry.allShippers.size).toBe(2); - }); - - test('adds the same shipper to different event types. The allShippers count does not increase', () => { - const shipper = shippersMock.createShipper(); // Explicitly testing with the same shipper implementation - - expect(shippersRegistry.allShippers.size).toBe(0); - shippersRegistry.addEventExclusiveShipper('testEvent1', 'testShipper', shipper); - expect(shippersRegistry.allShippers.size).toBe(1); - shippersRegistry.addEventExclusiveShipper('testEvent2', 'testShipper', shipper); - expect(shippersRegistry.allShippers.size).toBe(1); // This is still 1 because the shipper is the same - }); - - test('returns an event-specific shipper', () => { - const shipper = shippersMock.createShipper(); - const shipperName = 'testShipper'; - const eventTypeName = 'testEvent'; - expect(shippersRegistry.allShippers.size).toBe(0); - shippersRegistry.addEventExclusiveShipper(eventTypeName, shipperName, shipper); - expect(shippersRegistry.allShippers.size).toBe(1); - - const shippersForEventType = shippersRegistry.getShippersForEventType(eventTypeName); - expect(shippersForEventType.size).toBe(1); - expect(shippersForEventType.get(shipperName)).toBe(shipper); - - // No event-specific shipper found, returns global but no shippers found in global - const shippersForEventTypeNotFound = shippersRegistry.getShippersForEventType( - `RandomEvent${Date.now()}` - ); - // eslint-disable-next-line dot-notation - expect(shippersForEventTypeNotFound).toBe(shippersRegistry['globalShippers']); - expect(shippersForEventTypeNotFound.size).toBe(0); - }); - }); -}); diff --git a/packages/analytics/ebt/client/src/analytics_client/shippers_registry.ts b/packages/analytics/ebt/client/src/analytics_client/shippers_registry.ts deleted file mode 100644 index 8380775679861..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/shippers_registry.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { EventType } from '../events'; -import type { IShipper } from '../shippers'; -import type { ShipperName } from './types'; - -/** - * Holds the map of the { [shipperName]: shipperInstance } - */ -export type ShippersMap = Map; - -export class ShippersRegistry { - /** - * Holds all the shippers: global and eventTypeExclusive. - * This helps to avoid looping over all the shippers when we just need them all. - */ - public readonly allShippers: ShippersMap = new Map(); - /** - * Holds the shippers that are not registered as exclusive to any event-type - */ - private readonly globalShippers: ShippersMap = new Map(); - /** - * Holds the shippers that are exclusive to an event-type in the format of { [eventType]: ShippersMap } - */ - private readonly eventTypeExclusiveShippers: Map = new Map(); - - /** - * Adds shipper to the registry. - * @param shipperName The unique name of the shipper. - * @param shipper The initialized shipper. - */ - public addGlobalShipper(shipperName: ShipperName, shipper: IShipper) { - if (this.globalShippers.get(shipperName)) { - throw new Error(`Shipper "${shipperName}" is already registered`); - } - this.globalShippers.set(shipperName, shipper); - this.allShippers.set(shipperName, shipper); - } - - /** - * Adds an event-type exclusive shipper. - * @param eventType The name of the event type - * @param shipperName The unique name for the shipper. - * @param shipper The initialized shipper. - */ - public addEventExclusiveShipper( - eventType: EventType, - shipperName: ShipperName, - shipper: IShipper - ) { - const eventExclusiveMap = this.eventTypeExclusiveShippers.get(eventType) || new Map(); - if (eventExclusiveMap.get(shipperName)) { - throw new Error(`${shipperName} is already registered for event-type ${eventType}`); - } - eventExclusiveMap.set(shipperName, shipper); - this.eventTypeExclusiveShippers.set(eventType, eventExclusiveMap); - this.allShippers.set(shipperName, shipper); - } - - /** - * Returns the shippers that must be used for the specified event type. - * @param eventType The name of the event type. - */ - public getShippersForEventType(eventType: EventType): ShippersMap { - return this.eventTypeExclusiveShippers.get(eventType) || this.globalShippers; - } -} diff --git a/packages/analytics/ebt/client/src/analytics_client/types.ts b/packages/analytics/ebt/client/src/analytics_client/types.ts deleted file mode 100644 index 18b55e88f5a91..0000000000000 --- a/packages/analytics/ebt/client/src/analytics_client/types.ts +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { Observable } from 'rxjs'; - -// If we are going to export this to a separate NPM module in the future, -// we'll need to revisit this import. -import type { Logger } from '@kbn/logging'; - -import type { IShipper } from '../shippers'; -import type { EventType, TelemetryCounter } from '../events'; -import type { RootSchema } from '../schema'; - -/** - * General settings of the analytics client - */ -export interface AnalyticsClientInitContext { - /** - * Boolean indicating if it's running in developer mode. - */ - isDev: boolean; - /** - * Specify if the shippers should send their data to the production or staging environments. - */ - sendTo: 'production' | 'staging'; - /** - * Application-provided logger. - */ - logger: Logger; -} - -/** - * Shipper Name used for indexed structures. Only used to improve the readability of the types - */ -export type ShipperName = string; - -/** - * Constructor of a {@link IShipper} - */ -export interface ShipperClassConstructor { - /** - * The shipper's unique name - */ - shipperName: ShipperName; - - /** - * The constructor - * @param config The shipper's custom config - * @param initContext Common context {@link AnalyticsClientInitContext} - */ - new (config: Config, initContext: AnalyticsClientInitContext): Shipper; -} - -/** - * Optional options to register a shipper - */ -export interface RegisterShipperOpts { - /** - * List of event types that will be received only by this shipper. - * @deprecated - * @internal Set as internal and deprecated until we come up with the best design for this. - * Not in the scope of the initial MVP. - */ - exclusiveEventTypes?: EventType[]; -} - -/** - * Sets whether a type of event is enabled/disabled globally or per shipper. - */ -export interface OptInConfigPerType { - /** - * The event type is globally enabled. - */ - enabled: boolean; - /** - * Controls if an event type should be disabled for a specific type of shipper. - * @example If the event type is automatically tracked by ShipperA, the config would look like: - * ``` - * { - * enabled: true, - * shippers: { - * ShipperA: false - * } - * } - * ``` - */ - shippers?: Record; -} - -/** - * Options for the optIn API - */ -export interface OptInConfig { - /** - * Controls the global enabled/disabled behaviour of the client and shippers. - */ - global: OptInConfigPerType; - /** - * Controls if an event type should be disabled for a specific type of shipper. - * @example If "clicks" are automatically tracked by ShipperA, the config would look like: - * ``` - * { - * global: { enabled: true }, - * event_types: { - * click: { - * enabled: true, - * shippers: { - * ShipperA: false - * } - * } - * } - * } - * ``` - */ - event_types?: Record; -} - -/** - * ContextProviderName used for indexed structures. Only used to improve the readability of the types - */ -export type ContextProviderName = string; - -/** - * Definition of a context provider - */ -export interface ContextProviderOpts { - /** - * The name of the provider. - */ - name: ContextProviderName; - /** - * Observable that emits the custom context. - */ - context$: Observable; - /** - * Schema declaring and documenting the expected output in the context$ - * - * @remark During development, it may be used to validate the provided values. - */ - schema: RootSchema; -} - -/** - * Definition of an Event Type. - */ -export interface EventTypeOpts { - /** - * The event type's unique name. - */ - eventType: EventType; - /** - * Schema declaring and documenting the expected structure of this event type. - * - * @remark During development, it may be used to validate the provided values. - */ - schema: RootSchema; -} - -/** - * Analytics client's public APIs - */ -export interface IAnalyticsClient { - /** - * Reports a telemetry event. - * @param eventType The event type registered via the `registerEventType` API. - * @param eventData The properties matching the schema declared in the `registerEventType` API. - * - * @track-adoption - */ - reportEvent: ( - eventType: EventType, - eventData: EventTypeData - ) => void; - /** - * Registers the event type that will be emitted via the reportEvent API. - * @param eventTypeOps The definition of the event type {@link EventTypeOpts}. - */ - registerEventType: (eventTypeOps: EventTypeOpts) => void; - - /** - * Set up the shipper that will be used to report the telemetry events. - * @param Shipper The {@link IShipper} class to instantiate the shipper. - * @param shipperConfig The config specific to the Shipper to instantiate. - * @param opts Additional options to register the shipper {@link RegisterShipperOpts}. - */ - registerShipper: ( - Shipper: ShipperClassConstructor, - shipperConfig: ShipperConfig, - opts?: RegisterShipperOpts - ) => void; - /** - * Used to control the user's consent to report the data. - * In the advanced mode, it allows to "cherry-pick" which events and shippers are enabled/disabled. - * @param optInConfig {@link OptInConfig} - */ - optIn: (optInConfig: OptInConfig) => void; - /** - * Registers the context provider to enrich any reported events. - * @param contextProviderOpts {@link ContextProviderOpts} - * - * @track-adoption - */ - registerContextProvider: (contextProviderOpts: ContextProviderOpts) => void; - /** - * Removes the context provider and stop enriching the events from its context. - * @param contextProviderName The name of the context provider to remove. - */ - removeContextProvider: (contextProviderName: ContextProviderName) => void; - /** - * Observable to emit the stats of the processed events. - */ - readonly telemetryCounter$: Observable; - /** - * Forces all shippers to send all their enqueued events and fulfills the returned promise. - */ - flush: () => Promise; - /** - * Stops the client. Flushing any pending events in the process. - */ - shutdown: () => Promise; -} diff --git a/packages/analytics/ebt/client/src/events/types.ts b/packages/analytics/ebt/client/src/events/types.ts deleted file mode 100644 index 78b2f792e9e2b..0000000000000 --- a/packages/analytics/ebt/client/src/events/types.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { ShipperName } from '../analytics_client'; - -/** - * Definition of the context that can be appended to the events through the {@link IAnalyticsClient.registerContextProvider}. - */ -export interface EventContext { - /** - * The UUID of the cluster - */ - cluster_uuid?: string; - /** - * The name of the cluster. - */ - cluster_name?: string; - /** - * The license ID. - */ - license_id?: string; - /** - * The unique user ID. - */ - userId?: string; - /** - * The Cloud ID. - */ - cloudId?: string; - /** - * `true` if the user is logged in via the Elastic Cloud authentication provider. - */ - isElasticCloudUser?: boolean; - /** - * The product's version. - */ - version?: string; - /** - * The name of the current page. - */ - pageName?: string; - /** - * The current application ID. - */ - applicationId?: string; - /** - * The current entity ID (dashboard ID, visualization ID, etc.). - */ - entityId?: string; - - /** - * Additional keys are allowed. - */ - [key: string]: unknown; -} - -/** - * Event Type used for indexed structures. Only used to improve the readability of the types - */ -export type EventType = string; - -/** - * Indicates if the event contains data about succeeded, failed or dropped events: - * - enqueued: The event was accepted and will be sent to the shippers when they become available (and opt-in === true). - * - sent_to_shipper: The event was sent to at least one shipper. - * - succeeded: The event was successfully sent by the shipper. - * - failed: There was an error when processing/shipping the event. Refer to the Telemetry Counter's code for the reason. - * - dropped: The event was dropped from the queue. Refer to the Telemetry Counter's code for the reason. - */ -export type TelemetryCounterType = - | 'enqueued' - | 'sent_to_shipper' - | 'succeeded' - | 'failed' - | 'dropped'; - -/** - * Shape of the events emitted by the telemetryCounter$ observable - */ -export interface TelemetryCounter { - /** - * {@link TelemetryCounterType} - */ - type: TelemetryCounterType; - /** - * Who emitted the event? It can be "client" or the name of the shipper. - */ - source: 'client' | ShipperName; - /** - * The event type the success/failure/drop event refers to. - */ - event_type: EventType; - /** - * Code to provide additional information about the success or failure. Examples are 200/400/504/ValidationError/UnknownError - */ - code: string; - /** - * The number of events that this counter refers to. - */ - count: number; -} - -/** - * Definition of the full event structure - */ -export interface Event> { - /** - * The time the event was generated in ISO format. - */ - timestamp: string; - /** - * The event type. - */ - event_type: EventType; - /** - * The specific properties of the event type. - */ - properties: Properties; - /** - * The {@link EventContext} enriched during the processing pipeline. - */ - context: EventContext; -} diff --git a/packages/analytics/ebt/client/src/schema/index.ts b/packages/analytics/ebt/client/src/schema/index.ts deleted file mode 100644 index e351a785c13ba..0000000000000 --- a/packages/analytics/ebt/client/src/schema/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export type { - RootSchema, - SchemaObject, - SchemaArray, - SchemaChildValue, - SchemaMeta, - SchemaValue, - SchemaMetaOptional, - PossibleSchemaTypes, - AllowedSchemaBooleanTypes, - AllowedSchemaNumberTypes, - AllowedSchemaStringTypes, - AllowedSchemaTypes, -} from './types'; diff --git a/packages/analytics/ebt/client/src/schema/types.test.ts b/packages/analytics/ebt/client/src/schema/types.test.ts deleted file mode 100644 index 9793528c21682..0000000000000 --- a/packages/analytics/ebt/client/src/schema/types.test.ts +++ /dev/null @@ -1,650 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { PossibleSchemaTypes, RootSchema, SchemaValue } from './types'; - -describe('schema types', () => { - describe('PossibleSchemaTypes', () => { - test('it should only allow "string" types', () => { - let valueType: PossibleSchemaTypes = 'keyword'; - valueType = 'text'; - valueType = 'date'; - - // @ts-expect-error - valueType = 'boolean'; - // @ts-expect-error - valueType = 'long'; - // @ts-expect-error - valueType = 'integer'; - // @ts-expect-error - valueType = 'short'; - // @ts-expect-error - valueType = 'byte'; - // @ts-expect-error - valueType = 'double'; - // @ts-expect-error - valueType = 'float'; - - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - test('it should only allow "number" types', () => { - let valueType: PossibleSchemaTypes = 'long'; - valueType = 'integer'; - valueType = 'short'; - valueType = 'byte'; - valueType = 'double'; - valueType = 'float'; - valueType = 'date'; - - // @ts-expect-error - valueType = 'boolean'; - // @ts-expect-error - valueType = 'keyword'; - - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - test('it should only allow "boolean" types', () => { - let valueType: PossibleSchemaTypes = 'boolean'; - // @ts-expect-error - valueType = 'integer'; - // @ts-expect-error - valueType = 'short'; - // @ts-expect-error - valueType = 'byte'; - // @ts-expect-error - valueType = 'double'; - // @ts-expect-error - valueType = 'float'; - // @ts-expect-error - valueType = 'date'; - - // @ts-expect-error - valueType = 'keyword'; - - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - }); - - describe('SchemaValue', () => { - describe('Pass Through', () => { - test('it should allow "pass_through" and enforce the _meta.description', () => { - let valueType: SchemaValue = { - type: 'pass_through', - _meta: { - description: 'Some description', - }, - }; - - valueType = { - type: 'pass_through', - _meta: { - description: 'Some description', - optional: false, - }, - }; - - valueType = { - type: 'pass_through', - _meta: { - description: 'Some description', - // @ts-expect-error optional can't be true when the types don't set the value as optional - optional: true, - }, - }; - - // @ts-expect-error because it's missing the _meta.description - valueType = { type: 'pass_through' }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - test('it should enforce `_meta.optional: true`', () => { - let valueType: SchemaValue = { - type: 'pass_through', - _meta: { - description: 'Some description', - optional: true, - }, - }; - - valueType = { - type: 'pass_through', - _meta: { - description: 'Some description', - // @ts-expect-error because optional can't be false when the value can be undefined - optional: false, - }, - }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - }); - - describe('Plain value', () => { - test('it should allow the correct type and enforce the _meta.description', () => { - let valueType: SchemaValue = { - type: 'keyword', - _meta: { - description: 'Some description', - }, - }; - - valueType = { - type: 'keyword', - _meta: { - description: 'Some description', - optional: false, - }, - }; - - valueType = { - // @ts-expect-error because the type does not match - type: 'long', - _meta: { - description: 'Some description', - optional: false, - }, - }; - - valueType = { - type: 'keyword', - _meta: { - description: 'Some description', - // @ts-expect-error optional can't be true when the types don't set the value as optional - optional: true, - }, - }; - - // @ts-expect-error because it's missing the _meta.description - valueType = { type: 'keyword' }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - test('it should enforce `_meta.optional: true`', () => { - let valueType: SchemaValue = { - type: 'keyword', - _meta: { - description: 'Some description', - optional: true, - }, - }; - - valueType = { - type: 'keyword', - _meta: { - description: 'Some description', - // @ts-expect-error because optional can't be false when the value can be undefined - optional: false, - }, - }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - }); - - describe('Date value', () => { - test('it should allow the correct type and enforce the _meta.description', () => { - let valueType: SchemaValue = { - type: 'date', - _meta: { - description: 'Some description', - }, - }; - - valueType = { - type: 'keyword', - _meta: { - description: 'Some description', - optional: false, - }, - }; - - valueType = { - // @ts-expect-error because the type does not match - type: 'long', - _meta: { - description: 'Some description', - optional: false, - }, - }; - - valueType = { - type: 'keyword', - _meta: { - description: 'Some description', - // @ts-expect-error optional can't be true when the types don't set the value as optional - optional: true, - }, - }; - - // @ts-expect-error because it's missing the _meta.description - valueType = { type: 'date' }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - test('it should enforce `_meta.optional: true`', () => { - let valueType: SchemaValue = { - type: 'date', - _meta: { - description: 'Some description', - optional: true, - }, - }; - - valueType = { - type: 'date', - _meta: { - description: 'Some description', - // @ts-expect-error because optional can't be false when the value can be undefined - optional: false, - }, - }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - }); - - describe('Object value', () => { - test('it should allow "pass_through" and enforce the _meta.description', () => { - let valueType: SchemaValue<{ a_value: string }> = { - type: 'pass_through', - _meta: { - description: 'Some description', - }, - }; - - // @ts-expect-error because it's missing the _meta.description - valueType = { type: 'pass_through' }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - - test('it should expect the proper object-schema definition, and allows some _meta at the object level as well', () => { - let valueType: SchemaValue<{ a_value: string }> = { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - }, - }, - }, - }; - - valueType = { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - optional: false, - }, - }, - }, - _meta: { - description: 'Description at the object level', - }, - }; - - valueType = { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - optional: false, - }, - }, - // @ts-expect-error b_value does not exist in the object definition - b_value: { - type: 'keyword', - _meta: { - description: 'Some description', - optional: true, - }, - }, - }, - _meta: { - description: 'Description at the object level', - }, - }; - - // @ts-expect-error because it's missing object properties - valueType = { properties: {} }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - - test('it should enforce `_meta.optional: true`', () => { - const objectValueType: SchemaValue<{ a_value: string } | undefined> = { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - }, - }, - }, - _meta: { - description: 'Optional object', - optional: true, - }, - }; - expect(objectValueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - - let valueType: SchemaValue<{ a_value?: string }> = { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - optional: true, - }, - }, - }, - }; - - valueType = { - properties: { - a_value: { - type: 'keyword', - // @ts-expect-error because it should provide optional: true - _meta: { - description: 'Some description', - }, - }, - }, - }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - }); - - describe('Array value', () => { - test('it should allow "pass_through" and enforce the _meta.description', () => { - let valueType: SchemaValue> = { - type: 'pass_through', - _meta: { - description: 'Some description', - }, - }; - - // @ts-expect-error because it's missing the _meta.description - valueType = { type: 'pass_through' }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - - test('it should expect the proper array-schema definition, and allows some _meta at the object level as well', () => { - let valueType: SchemaValue> = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - }, - }, - }, - }, - }; - - valueType = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - optional: false, - }, - }, - }, - _meta: { - description: 'Description at the object level', - }, - }, - }; - - // @ts-expect-error because it's missing the items definition - valueType = { type: 'array' }; - // @ts-expect-error because it's missing the items definition - valueType = { type: 'array', items: {} }; - // @ts-expect-error because it's missing the items' properties definition - valueType = { type: 'array', items: { properties: {} } }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - - test('it should enforce `_meta.optional: true`', () => { - const arrayValueType: SchemaValue | undefined> = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - }, - }, - }, - }, - _meta: { - description: 'Optional object', - optional: true, - }, - }; - expect(arrayValueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - - const objectValueType: SchemaValue> = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - }, - }, - }, - _meta: { - description: 'Optional object', - optional: true, - }, - }, - }; - expect(objectValueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - - let valueType: SchemaValue> = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - optional: true, - }, - }, - }, - }, - }; - - valueType = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - // @ts-expect-error because it should provide optional: true - _meta: { - description: 'Some description', - }, - }, - }, - }, - }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - - test('it should expect support readonly arrays', () => { - let valueType: SchemaValue> = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - }, - }, - }, - }, - }; - - valueType = { - type: 'array', - items: { - properties: { - a_value: { - type: 'keyword', - _meta: { - description: 'Some description', - optional: false, - }, - }, - }, - _meta: { - description: 'Description at the object level', - }, - }, - }; - - // @ts-expect-error because it's missing the items definition - valueType = { type: 'array' }; - // @ts-expect-error because it's missing the items definition - valueType = { type: 'array', items: {} }; - // @ts-expect-error because it's missing the items' properties definition - valueType = { type: 'array', items: { properties: {} } }; - expect(valueType).not.toBeUndefined(); // <-- Only to stop the var-not-used complain - }); - }); - }); - - describe('RootSchema', () => { - const registerSchema = (schema: RootSchema) => schema; - test('it works with the explicit types', () => { - registerSchema<{ - my_keyword: string; - my_number?: number; - my_complex_unknown_meta_object: Record; - my_array_of_str: string[]; - my_object: { my_timestamp: string }; - my_array_of_objects: Array<{ my_bool_prop: boolean }>; - }>({ - my_keyword: { - type: 'keyword', - _meta: { - description: 'Represents the key property...', - }, - }, - my_number: { - type: 'long', - _meta: { - description: 'Indicates the number of times...', - optional: true, - }, - }, - my_complex_unknown_meta_object: { - type: 'pass_through', - _meta: { - description: 'Unknown object that contains the key-values...', - }, - }, - my_array_of_str: { - type: 'array', - items: { - type: 'text', - _meta: { - description: 'List of tags...', - }, - }, - }, - my_object: { - properties: { - my_timestamp: { - type: 'date', - _meta: { - description: 'timestamp when the user...', - }, - }, - }, - }, - my_array_of_objects: { - type: 'array', - items: { - properties: { - my_bool_prop: { - type: 'boolean', - _meta: { - description: '`true` when...', - }, - }, - }, - }, - }, - }); - }); - test('it works with implicit types', () => { - registerSchema({}); - registerSchema({ - my_keyword: { - type: 'keyword', - _meta: { - description: 'Represents the key property...', - }, - }, - my_number: { - type: 'long', - _meta: { - description: 'Indicates the number of times...', - optional: true, - }, - }, - my_complex_unknown_meta_object: { - type: 'pass_through', - _meta: { - description: 'Unknown object that contains the key-values...', - }, - }, - my_array_of_str: { - type: 'array', - items: { - type: 'text', - _meta: { - description: 'List of tags...', - }, - }, - }, - my_object: { - properties: { - my_timestamp: { - type: 'date', - _meta: { - description: 'timestamp when the user...', - }, - }, - }, - }, - my_array_of_objects: { - type: 'array', - items: { - properties: { - my_bool_prop: { - type: 'boolean', - _meta: { - description: '`true` when...', - }, - }, - }, - }, - }, - }); - }); - }); -}); diff --git a/packages/analytics/ebt/client/src/schema/types.ts b/packages/analytics/ebt/client/src/schema/types.ts deleted file mode 100644 index caa638bed9dc8..0000000000000 --- a/packages/analytics/ebt/client/src/schema/types.ts +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -/** Types matching number values **/ -export type AllowedSchemaNumberTypes = - | 'long' - | 'integer' - | 'short' - | 'byte' - | 'double' - | 'float' - | 'date'; -/** Types matching string values **/ -export type AllowedSchemaStringTypes = 'keyword' | 'text' | 'date'; -/** Types matching boolean values **/ -export type AllowedSchemaBooleanTypes = 'boolean'; - -/** - * Possible type values in the schema - */ -export type AllowedSchemaTypes = - | AllowedSchemaNumberTypes - | AllowedSchemaStringTypes - | AllowedSchemaBooleanTypes; - -/** - * Helper to ensure the declared types match the schema types - */ -export type PossibleSchemaTypes = Value extends string | Date - ? AllowedSchemaStringTypes - : Value extends number - ? AllowedSchemaNumberTypes - : Value extends boolean - ? AllowedSchemaBooleanTypes - : // allow any schema type from the union if typescript is unable to resolve the exact U type - AllowedSchemaTypes; - -/** - * Schema to define a primitive value - */ -export interface SchemaChildValue { - /** The type of the value */ - type: PossibleSchemaTypes>; - /** Meta properties of the value: description and is optional */ - _meta: { - /** A description of the value */ - description: string; // Intentionally enforcing the descriptions here - } & SchemaMetaOptional; -} - -/** - * Type that defines all the possible values that the Schema accepts. - * These types definitions are helping to identify earlier the possible missing `properties` nesting when - * manually defining the schemas. - */ -export type SchemaValue = - // Always allow the pass_through no matter what the value is - | { - /** Type specification of a pass through object */ - type: 'pass_through'; - /** Meta properties of the pass through: description and is optional */ - _meta: { - /** A description of the value */ - description: string; // Intentionally enforcing the descriptions here - } & SchemaMetaOptional; - } - | (unknown extends Value - ? // If the Value is unknown (TS can't infer the type), allow any type of schema - SchemaArray | SchemaObject | SchemaChildValue - : // Otherwise, try to infer the type and enforce the schema - NonNullable extends Array | ReadonlyArray - ? SchemaArray - : NonNullable extends Date - ? SchemaChildValue - : NonNullable extends object - ? SchemaObject - : SchemaChildValue); - -/** - * Enforces { optional: true } if the value can be undefined - */ -export type SchemaMetaOptional = unknown extends Value - ? { optional?: boolean } - : undefined extends Value - ? { optional: true } - : { optional?: false }; - -/** - * Schema meta with optional description - */ -export interface SchemaMeta { - /** Meta properties of the pass through: description and is optional */ - _meta?: { - /** A description of the value */ - description?: string; - } & SchemaMetaOptional; -} - -/** - * Schema to represent an array - */ -export interface SchemaArray extends SchemaMeta { - /** The type must be an array */ - type: 'array'; - /** The schema of the items in the array is defined in the `items` property */ - items: SchemaValue; -} - -/** - * Schema to represent an object - */ -export interface SchemaObject extends SchemaMeta { - /** - * The schemas of the keys of the object are defined in the `properties` object. - */ - properties: { - [Key in keyof Required]: SchemaValue; - }; -} - -/** - * Schema definition to match the structure of the properties provided. - * - * @example - * { - * my_keyword: { - * type: 'keyword', - * _meta: { - * description: 'Represents the key property...' - * } - * }, - * my_number: { - * type: 'long', - * _meta: { - * description: 'Indicates the number of times...', - * optional: true - * } - * }, - * my_complex_unknown_meta_object: { - * type: 'pass_through', - * _meta: { - * description: 'Unknown object that contains the key-values...' - * } - * }, - * my_array_of_str: { - * type: 'array', - * items: { - * type: 'text', - * _meta: { - * description: 'List of tags...' - * } - * } - * }, - * my_object: { - * properties: { - * my_timestamp: { - * type: 'date', - * _meta: { - * description: 'timestamp when the user...' - * } - * } - * } - * }, - * my_array_of_objects: { - * type: 'array', - * items: { - * properties: { - * my_bool_prop: { - * type: 'boolean', - * _meta: { - * description: '`true` when...' - * } - * } - * } - * } - * } - * } - */ -export type RootSchema = SchemaObject['properties']; diff --git a/packages/analytics/ebt/client/src/schema/validation/excess.test.ts b/packages/analytics/ebt/client/src/schema/validation/excess.test.ts deleted file mode 100644 index 8cb9aca7b060b..0000000000000 --- a/packages/analytics/ebt/client/src/schema/validation/excess.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import * as t from 'io-ts'; -import { either, isLeft } from 'fp-ts/lib/Either'; -import { excess } from './excess'; - -describe('excess', () => { - test('should pass validation when not found extra properties', () => { - const validator = excess(t.interface({ a_string: t.string, a_number: t.number })); - const invalidObj = { a_string: 'test', a_number: 1 }; - expect(validator.is(invalidObj)).toBe(true); - const result = validator.decode(invalidObj); - expect(isLeft(result)).toBe(false); - }); - - test('should not pass validation when found extra properties', () => { - const validator = excess(t.interface({ a_string: t.string, a_number: t.number })); - const invalidObj = { a_string: 'test', a_number: 1, another_string: 'test' }; - expect(validator.is(invalidObj)).toBe(false); - const result = validator.decode(invalidObj); - expect(isLeft(result)).toBe(true); - either.mapLeft(result, (validationError) => - expect(validationError[0].message).toBe(`excess key 'another_string' found`) - ); - }); - - test('should not pass validation when found a non-declared property in an all-optional object', () => { - const validator = excess(t.partial({ a_string: t.string, a_number: t.number })); - const invalidObj = { another_string: 'test' }; - expect(validator.is(invalidObj)).toBe(false); - const result = validator.decode(invalidObj); - expect(isLeft(result)).toBe(true); - either.mapLeft(result, (validationErrors) => - expect(validationErrors.map((err) => err.message)).toStrictEqual([ - `excess key 'another_string' found`, - ]) - ); - }); -}); diff --git a/packages/analytics/ebt/client/src/schema/validation/excess.ts b/packages/analytics/ebt/client/src/schema/validation/excess.ts deleted file mode 100644 index af6ec945f2a96..0000000000000 --- a/packages/analytics/ebt/client/src/schema/validation/excess.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -// Extra IO-TS type to not allow more keys than the defined ones. -// Extracted from https://github.com/gcanti/io-ts/issues/322 - -import * as t from 'io-ts'; -import { either, Either, isRight, left, right, Right } from 'fp-ts/lib/Either'; - -const getIsCodec = - (tag: string) => - (codec: t.Any): codec is T => - (codec as t.Any & { _tag: string })._tag === tag; - -const isInterfaceCodec = getIsCodec>('InterfaceType'); -const isPartialCodec = getIsCodec>('PartialType'); -const isIntersectionType = getIsCodec>('IntersectionType'); - -const getProps = (codec: t.HasProps): t.Props => { - switch (codec._tag) { - case 'RefinementType': - case 'ReadonlyType': - return getProps(codec.type); - case 'InterfaceType': - case 'StrictType': - case 'PartialType': - return codec.props; - case 'IntersectionType': - return codec.types.reduce((props, type) => Object.assign(props, getProps(type)), {}); - } -}; - -const getNameFromProps = (props: t.Props, isPartial: boolean): string => - Object.keys(props) - .map((k) => `${k}${isPartial ? '?' : ''}: ${props[k].name}`) - .join(', '); - -/** - * Provides a human-readable definition of the io-ts validator. - * @param codec The io-ts declaration passed as an argument to the Excess method. - * @remarks Since we currently use it only with objects, we'll cover the IntersectionType and PartialType - */ -const getExcessTypeName = (codec: t.Any): string => { - if (isIntersectionType(codec)) { - return `{ ${codec.types - .map((subCodec) => { - if (isInterfaceCodec(subCodec)) { - return getNameFromProps(subCodec.props, false); - } - if (isPartialCodec(subCodec)) { - return getNameFromProps(subCodec.props, true); - } - return subCodec.name; - }) - .filter(Boolean) - .join(', ')} }`; - } - return `Excess<${codec.name}>`; -}; - -const stripKeys = (o: T, props: t.Props): Either => { - const keys = Object.getOwnPropertyNames(o); - const propsKeys = Object.getOwnPropertyNames(props); - - propsKeys.forEach((pk) => { - const index = keys.indexOf(pk); - if (index !== -1) { - keys.splice(index, 1); - } - }); - - return keys.length ? left(keys) : right(o); -}; - -/** - * Validate if there are any keys that exist in the validated object, but they don't in the validation object. - * @param codec The io-ts schema to wrap with this validation - * @param name (optional) Replace the custom logic to name the validation error by providing a static name. - */ -export const excess = ( - codec: C, - name: string = getExcessTypeName(codec) -): ExcessType => { - const props: t.Props = getProps(codec); - return new ExcessType( - name, - (u): u is C => isRight(stripKeys(u, props)) && codec.is(u), - (u, c) => - either.chain(t.UnknownRecord.validate(u, c), () => - either.chain(codec.validate(u, c), (a) => - either.mapLeft(stripKeys(a, props), (keys) => - keys.map((k) => ({ - value: a[k], - context: c, - message: `excess key '${k}' found`, - })) - ) - ) - ), - (a) => codec.encode((stripKeys(a, props) as Right).right), - codec - ); -}; - -class ExcessType extends t.Type { - public readonly _tag: 'ExcessType' = 'ExcessType'; - constructor( - name: string, - is: ExcessType['is'], - validate: ExcessType['validate'], - encode: ExcessType['encode'], - public readonly type: C - ) { - super(name, is, validate, encode); - } -} diff --git a/packages/analytics/ebt/client/src/schema/validation/schema_to_io_ts.test.ts b/packages/analytics/ebt/client/src/schema/validation/schema_to_io_ts.test.ts deleted file mode 100644 index 4a301a34d8656..0000000000000 --- a/packages/analytics/ebt/client/src/schema/validation/schema_to_io_ts.test.ts +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { AllowedSchemaTypes, RootSchema } from '../types'; -import { schemaToIoTs } from './schema_to_io_ts'; - -describe(`convertSchemaToIoTs`, () => { - test('fail with anything other than an object', () => { - // @ts-expect-error - expect(() => schemaToIoTs(null)).toThrow(); - }); - test('invalid type => errors with malformed schema', () => { - expect(() => - schemaToIoTs({ - // @ts-expect-error Non-valid type - an_invalid_field: { type: 'invalid', _meta: { description: 'Test description' } }, - }) - ).toThrow(/Malformed schema/); - }); - test('array type missing `items` => errors with malformed schema', () => { - expect(() => - schemaToIoTs({ - // @ts-expect-error Non-valid array-construct - an_invalid_field: { type: 'array' }, - }) - ).toThrow(/Malformed schema/); - }); - test('minimal schemas and empty value => pass', () => { - const validator = schemaToIoTs({}); - expect(validator.is({})).toBe(true); - }); - test('value has fields not defined in the schema => fail', () => { - const validator = schemaToIoTs({}); - expect(validator.is({ version: 'some-version' })).toBe(false); - expect(validator.is({ an_array: [{ docs: { missing: 1 } }] })).toBe(false); - }); - test('support optional fields', () => { - const validator = schemaToIoTs({ - an_optional_field: { - type: 'keyword', - _meta: { - description: 'An optional field', - optional: true, - }, - }, - an_optional_obj: { - _meta: { optional: true }, - properties: { - other_field: { type: 'short', _meta: { description: 'Test description' } }, - }, - }, - an_optional_array: { - type: 'array', - items: { type: 'short', _meta: { description: 'Test description' } }, - _meta: { optional: true }, - }, - }); - expect(validator.is({})).toBe(true); - }); - test('value has nested-fields not defined in the schema => fail', () => { - const schemas: Array> = [ - { - an_array: { - type: 'array', - _meta: { description: 'Test description' }, - items: { - properties: {}, - }, - }, - }, - { - an_array: { - type: 'array', - _meta: { description: 'Test description' }, - items: { - properties: { docs: { properties: {} } }, - }, - }, - }, - ]; - schemas.forEach((schema) => { - const validator = schemaToIoTs(schema); - expect(validator.is({ an_array: [{ docs: { missing: 1 } }] })).toBe(false); - }); - }); - test('value has nested-fields defined in the schema, but with wrong type => fail', () => { - const validator = schemaToIoTs({ - an_array: { - type: 'array', - items: { - properties: { - docs: { - properties: { - field: { type: 'short', _meta: { description: 'Test description' } }, - }, - }, - }, - }, - }, - }); - expect(validator.is({ an_array: [{ docs: { field: 'abc' } }] })).toBe(false); - }); - test.each([ - 'boolean', - 'byte', - 'double', - 'float', - 'integer', - 'long', - 'short', - ] as AllowedSchemaTypes[])('Expected type %s, but got string', (type) => { - const validator = schemaToIoTs({ - a_field: { type, _meta: { description: 'Test description' } }, - }); - expect(validator.is({ a_field: 'abc' })).toBe(false); - }); - test.each(['keyword', 'text', 'date'] as AllowedSchemaTypes[])( - 'Expected type %s, but got number', - (type) => { - const validator = schemaToIoTs({ - a_field: { type, _meta: { description: 'Test description' } }, - }); - expect(validator.is({ a_field: 1234 })).toBe(false); - } - ); - test('Support DYNAMIC_KEY', () => { - const validator = schemaToIoTs({ - a_field: { - properties: { DYNAMIC_KEY: { type: 'short', _meta: { description: 'Test description' } } }, - }, - }); - expect(validator.is({ a_field: { some_key: 1234 } })).toBe(true); - }); - test('Support DYNAMIC_KEY + known props', () => { - const validator = schemaToIoTs({ - a_field: { - properties: { - DYNAMIC_KEY: { type: 'short', _meta: { description: 'Test description' } }, - known_prop: { type: 'short', _meta: { description: 'Test description' } }, - }, - }, - }); - expect(validator.is({ a_field: { some_key: 1234, known_prop: 1234 } })).toBe(true); - }); - test('value has nested-fields defined in the schema => succeed', () => { - const validator = schemaToIoTs({ - an_array: { - type: 'array', - items: { - properties: { - docs: { - properties: { - field: { type: 'short', _meta: { description: 'Test description' } }, - }, - }, - }, - }, - }, - }); - expect(validator.is({ an_array: [{ docs: { field: 1 } }] })).toBe(true); - }); - - test('allow pass_through properties', () => { - const validator = schemaToIoTs({ - im_only_passing_through_data: { - type: 'pass_through', - _meta: { description: 'Test description' }, - }, - }); - expect(validator.is({ im_only_passing_through_data: [{ docs: { field: 1 } }] })).toBe(true); - }); -}); diff --git a/packages/analytics/ebt/client/src/schema/validation/schema_to_io_ts.ts b/packages/analytics/ebt/client/src/schema/validation/schema_to_io_ts.ts deleted file mode 100644 index 89b95dfe9a373..0000000000000 --- a/packages/analytics/ebt/client/src/schema/validation/schema_to_io_ts.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import * as t from 'io-ts'; -import type { RootSchema, SchemaArray, SchemaObject, SchemaValue } from '../types'; -import { excess } from './excess'; - -/** - * Is it a tuple of t.Mixed? - * @param schemas Array of io-ts schemas - */ -function isOneOfCandidate(schemas: t.Mixed[]): schemas is [t.Mixed, t.Mixed] { - return schemas.length === 2; -} - -/** - * Converts each {@link SchemaValue} to the io-ts equivalent - * @param value The {@link SchemaValue} to parse - */ -function schemaValueToIoTs(value: SchemaValue): t.Mixed { - // We need to check the pass_through type on top of everything - if ((value as { type: 'pass_through' }).type === 'pass_through') { - return t.unknown; - } - - if ('properties' in value) { - const { DYNAMIC_KEY, ...properties } = value.properties as SchemaObject['properties'] & { - DYNAMIC_KEY?: SchemaValue; - }; - const schemas: t.Mixed[] = [schemaObjectToIoTs>({ properties })]; - if (DYNAMIC_KEY) { - schemas.push(t.record(t.string, schemaValueToIoTs(DYNAMIC_KEY))); - } - return isOneOfCandidate(schemas) ? t.union(schemas) : schemas[0]; - } else { - const valueType = value.type; // Copied in here because of TS reasons, it's not available in the `default` case - switch (valueType) { - case 'boolean': - return t.boolean; - case 'keyword': - case 'text': - case 'date': - return t.string; - case 'byte': - case 'double': - case 'float': - case 'integer': - case 'long': - case 'short': - return t.number; - case 'array': - if ('items' in value) { - return t.array(schemaValueToIoTs((value as SchemaArray).items)); - } - throw new Error(`Schema type must include the "items" declaration.`); - default: - throw new Error(`Unsupported schema type ${valueType}.`); - } - } -} - -/** - * Loops through a list of [key, SchemaValue] tuples to convert them into a valid io-ts parameter to define objects. - * @param entries Array of tuples [key, {@link SchemaValue}]. Typically, coming from Object.entries(SchemaObject). - */ -function entriesToObjectIoTs( - entries: Array<[string, SchemaValue]> -): Record { - return Object.fromEntries( - entries.map(([key, value]) => { - try { - return [key, schemaValueToIoTs(value)]; - } catch (err) { - err.failedKey = [key, ...(err.failedKey || [])]; - throw err; - } - }) - ); -} - -/** - * Converts a {@link SchemaObject} to the io-ts equivalent. - * @param schemaObject The {@link SchemaObject} to parse. - */ -function schemaObjectToIoTs( - schemaObject: SchemaObject -): t.Type> { - const objectEntries: Array<[string, SchemaValue]> = Object.entries( - schemaObject.properties - ); - - const requiredFields = objectEntries.filter(([key, { _meta }]) => _meta?.optional !== true); - const optionalFields = objectEntries.filter(([key, { _meta }]) => _meta?.optional === true); - - return excess( - t.intersection([ - t.interface(entriesToObjectIoTs(requiredFields)), - t.partial(entriesToObjectIoTs(optionalFields)), - ]) - ); -} - -/** - * Converts a {@link RootSchema} to an io-ts validation object. - * @param rootSchema The {@link RootSchema} to be parsed. - */ -export function schemaToIoTs(rootSchema: RootSchema): t.Type> { - try { - return schemaObjectToIoTs({ properties: rootSchema }); - } catch (err) { - if (err.failedKey) { - err.message = `Malformed schema for key [${err.failedKey.join('.')}]: ${err.message}`; - } - throw err; - } -} diff --git a/packages/analytics/ebt/client/src/schema/validation/validate_schema.test.ts b/packages/analytics/ebt/client/src/schema/validation/validate_schema.test.ts deleted file mode 100644 index dee7f96d50b02..0000000000000 --- a/packages/analytics/ebt/client/src/schema/validation/validate_schema.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { validateSchema } from './validate_schema'; -import { schemaToIoTs } from './schema_to_io_ts'; - -describe('validateSchema', () => { - describe('successful', () => { - test('valid object', () => { - expect(() => - validateSchema( - 'test source', - schemaToIoTs({ - an_object: { - properties: { a_field: { type: 'keyword', _meta: { description: 'A test field' } } }, - }, - }), - { an_object: { a_field: 'test' } } - ) - ).not.toThrow(); - }); - }); - describe('failed', () => { - test('object is valid but it has some extra fields not declared in the schema', () => { - expect(() => - validateSchema( - 'test source', - schemaToIoTs({ - an_object: { - properties: { a_field: { type: 'keyword', _meta: { description: 'A test field' } } }, - }, - }), - { an_object: { a_field: 'test' }, another_object: { a_field: 'test' } } - ) - ).toThrowErrorMatchingInlineSnapshot(` - "Failed to validate payload coming from \\"test source\\": - - []: excess key 'another_object' found" - `); - }); - - test('object is valid but it has some extra nested fields not declared in the schema', () => { - expect(() => - validateSchema( - 'test source', - schemaToIoTs({ - an_object: { - properties: { a_field: { type: 'keyword', _meta: { description: 'A test field' } } }, - }, - }), - { an_object: { a_field: 'test', an_extra_field: 'test' } } - ) - ).toThrowErrorMatchingInlineSnapshot(` - "Failed to validate payload coming from \\"test source\\": - - [an_object]: excess key 'an_extra_field' found" - `); - }); - - test('the object is not valid because it is missing a key', () => { - expect(() => - validateSchema( - 'test source', - schemaToIoTs({ - an_object: { - properties: { a_field: { type: 'keyword', _meta: { description: 'A test field' } } }, - }, - an_optional_object: { - properties: { a_field: { type: 'keyword', _meta: { description: 'A test field' } } }, - _meta: { optional: true }, - }, - }), - { another_object: { a_field: 'test' } } - ) - ).toThrowErrorMatchingInlineSnapshot(` - "Failed to validate payload coming from \\"test source\\": - - [an_object]: {\\"expected\\":\\"{ a_field: string }\\",\\"actual\\":\\"undefined\\",\\"value\\":\\"undefined\\"}" - `); - }); - - test('lists multiple errors', () => { - expect(() => - validateSchema( - 'test source', - schemaToIoTs({ - an_object: { - properties: { a_field: { type: 'keyword', _meta: { description: 'A test field' } } }, - }, - an_optional_object: { - properties: { a_field: { type: 'keyword', _meta: { description: 'A test field' } } }, - _meta: { optional: true }, - }, - }), - { - an_object: { a_field: 'test', an_extra_field: 'test' }, - an_optional_object: {}, - another_object: { a_field: 'test' }, - } - ) - ).toThrowErrorMatchingInlineSnapshot(` - "Failed to validate payload coming from \\"test source\\": - - [an_object]: excess key 'an_extra_field' found - - [an_optional_object.a_field]: {\\"expected\\":\\"string\\",\\"actual\\":\\"undefined\\",\\"value\\":\\"undefined\\"}" - `); - }); - }); -}); diff --git a/packages/analytics/ebt/client/src/schema/validation/validate_schema.ts b/packages/analytics/ebt/client/src/schema/validation/validate_schema.ts deleted file mode 100644 index 158acaa1fcd74..0000000000000 --- a/packages/analytics/ebt/client/src/schema/validation/validate_schema.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { Context, Type } from 'io-ts'; -import { either } from 'fp-ts/lib/Either'; - -/** - * Validates the event according to the schema validator generated by {@link convertSchemaToIoTs}. - * @throws Error when the event does not comply with the schema. - * @param validator The io-ts validator for the event. - * @param payload The payload to validate. - */ -export function validateSchema( - sourceName: string, - validator: Type, - payload: Payload -): void { - // Run io-ts validation to the event - const result = validator.decode(payload); - - either.mapLeft(result, (validationErrors) => { - const humanFriendlyErrors = validationErrors - .map( - (err) => `[${getFullPathKey(err.context)}]: ${err.message ?? readableContext(err.context)}` - ) - .filter((errMsg, idx, listOfErrMsgs) => listOfErrMsgs.indexOf(errMsg, idx + 1) === -1); - throw new Error( - `Failed to validate payload coming from "${sourceName}":\n\t- ${humanFriendlyErrors.join( - '\n\t- ' - )}` - ); - }); -} - -/** - * Picks the relevant fields of the validation error's context - * @param context The {@link Context} coming from the validation error - */ -function readableContext(context: Context) { - // The information provided, the last context is good enough. - // Otherwise, repeating the values for every nested key is too noisy. - const last = context[context.length - 1]; - return JSON.stringify({ - expected: last.type.name, - // Explicitly printing `undefined` to make it more obvious in the message - actual: typeof last.actual, - value: last.actual === undefined ? 'undefined' : last.actual, - }); -} - -/** - * Prints the full path to the key that raised the validation error. - * @param context The {@link Context} coming from the validation error - */ -function getFullPathKey(context: Context): string { - return ( - context - // Remove the context provided by InterfaceType and PartialType because their keys are simply numeric indices - .filter( - (ctx) => - !['InterfaceType', 'PartialType'].includes( - (ctx.type as Type & { _tag: string })._tag - ) - ) - .map(({ key }) => key) - .filter(Boolean) - .join('.') - ); -} diff --git a/packages/analytics/ebt/client/src/shippers/mocks.ts b/packages/analytics/ebt/client/src/shippers/mocks.ts deleted file mode 100644 index fccdd4788f7d9..0000000000000 --- a/packages/analytics/ebt/client/src/shippers/mocks.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { Subject } from 'rxjs'; -import type { IShipper } from './types'; -import type { TelemetryCounter } from '../events'; - -function createShipper(): jest.Mocked { - return new MockedShipper(); -} - -class MockedShipper implements IShipper { - public static shipperName = 'mocked-shipper'; - - constructor() {} - - public optIn = jest.fn(); - public reportEvents = jest.fn(); - public extendContext = jest.fn(); - public telemetryCounter$ = new Subject(); - public flush = jest.fn(); - public shutdown = jest.fn(); -} - -export const shippersMock = { - createShipper, - MockedShipper, -}; diff --git a/packages/analytics/ebt/client/src/shippers/types.ts b/packages/analytics/ebt/client/src/shippers/types.ts deleted file mode 100644 index c1e2ab8a81153..0000000000000 --- a/packages/analytics/ebt/client/src/shippers/types.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { Observable } from 'rxjs'; -import { Event, EventContext, TelemetryCounter } from '../events'; - -/** - * Basic structure of a Shipper - */ -export interface IShipper { - /** - * Adapts and ships the event to the persisting/analytics solution. - * @param events batched events {@link Event} - */ - reportEvents: (events: Event[]) => void; - /** - * Stops/restarts the shipping mechanism based on the value of isOptedIn - * @param isOptedIn `true` for resume sending events. `false` to stop. - */ - optIn: (isOptedIn: boolean) => void; - /** - * Perform any necessary calls to the persisting/analytics solution to set the event's context. - * @param newContext The full new context to set {@link EventContext} - */ - extendContext?: (newContext: EventContext) => void; - /** - * Observable to emit the stats of the processed events. - */ - telemetryCounter$?: Observable; - /** - * Sends all the enqueued events and fulfills the returned promise. - */ - flush: () => Promise; - /** - * Shutdown the shipper. - */ - shutdown: () => void; -} diff --git a/packages/analytics/ebt/index.ts b/packages/analytics/ebt/index.ts deleted file mode 100644 index ec407b406d406..0000000000000 --- a/packages/analytics/ebt/index.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 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. - */ - -// Exporting the types here as a utility only -// The recommended way of using this library is to import from the subdirectories /client, /shippers/* -// The reason is to avoid leaking server-side code to the browser, and vice-versa -export type { - AnalyticsClient, - // Types for the constructor - AnalyticsClientInitContext, - // Types for the registerShipper API - ShipperClassConstructor, - RegisterShipperOpts, - // Types for the optIn API - OptInConfig, - OptInConfigPerType, - ShipperName, - // Types for the registerContextProvider API - ContextProviderOpts, - ContextProviderName, - // Types for the registerEventType API - EventTypeOpts, - // Events - Event, - EventContext, - EventType, - TelemetryCounter, - TelemetryCounterType, - // Schema - RootSchema, - SchemaObject, - SchemaArray, - SchemaChildValue, - SchemaMeta, - SchemaValue, - SchemaMetaOptional, - PossibleSchemaTypes, - AllowedSchemaBooleanTypes, - AllowedSchemaNumberTypes, - AllowedSchemaStringTypes, - AllowedSchemaTypes, - // Shippers - IShipper, -} from './client'; -export type { ElasticV3ShipperOptions } from './shippers/elastic_v3/common'; -export type { ElasticV3BrowserShipper } from './shippers/elastic_v3/browser'; -export type { ElasticV3ServerShipper } from './shippers/elastic_v3/server'; -export type { - FullStoryShipperConfig, - FullStoryShipper, - FullStorySnippetConfig, -} from './shippers/fullstory'; diff --git a/packages/analytics/ebt/kibana.jsonc b/packages/analytics/ebt/kibana.jsonc deleted file mode 100644 index 947d6224b6933..0000000000000 --- a/packages/analytics/ebt/kibana.jsonc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "shared-common", - "id": "@kbn/ebt", - "owner": "@elastic/kibana-core" -} diff --git a/packages/analytics/ebt/shippers/README.md b/packages/analytics/ebt/shippers/README.md deleted file mode 100644 index 3f312d1ecefe3..0000000000000 --- a/packages/analytics/ebt/shippers/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# @kbn/ebt/shippers/* - -This directory holds the implementation of the _built-in_ shippers provided by the Analytics client. At the moment, the shippers are: - -* [FullStory](./fullstory/README.md) -* [Elastic V3 (Browser shipper)](./elastic_v3/browser/README.md) -* [Elastic V3 (Server-side shipper)](./elastic_v3/server/README.md) diff --git a/packages/analytics/ebt/shippers/elastic_v3/browser/README.md b/packages/analytics/ebt/shippers/elastic_v3/browser/README.md deleted file mode 100644 index 1253a9619233d..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/browser/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# @kbn/ebt/shippers/elastic_v3/browser - -UI-side implementation of the Elastic V3 shipper for the `@kbn/ebt/client`. - -## How to use it - -This module is intended to be used **on the browser only**. Due to the nature of the UI events, they are usually more scattered in time, and we can assume a much lower load than the server. For that reason, it doesn't apply the necessary backpressure mechanisms to prevent the server from getting overloaded with too many events neither identifies if the server sits behind a firewall to discard any incoming events. Refer to `@kbn/ebt/shippers/elastic_v3/server` for the server-side implementation. - -```typescript -import { ElasticV3BrowserShipper } from "@kbn/ebt/shippers/elastic_v3/browser"; - -analytics.registerShipper(ElasticV3BrowserShipper, { channelName: 'myChannel', version: '1.0.0' }); -``` - -## Configuration - -| Name | Description | -|:-------------:|:-------------------------------------------------------------------------------------------| -| `channelName` | The name of the channel to send the events. | -| `version` | The version of the application generating the events. | -| `debug` | When `true`, it logs the responses from the remote Telemetry Service. Defaults to `false`. | - -## Transmission protocol - -This shipper sends the events to the Elastic Internal Telemetry Service. The incoming events are buffered for up to 1 second to attempt to send them in a single request. diff --git a/packages/analytics/ebt/shippers/elastic_v3/browser/src/browser_shipper.test.ts b/packages/analytics/ebt/shippers/elastic_v3/browser/src/browser_shipper.test.ts deleted file mode 100644 index fd8d7f680fd3c..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/browser/src/browser_shipper.test.ts +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { loggerMock } from '@kbn/logging-mocks'; -import { firstValueFrom } from 'rxjs'; -import type { AnalyticsClientInitContext, Event } from '../../../../client'; -import { ElasticV3BrowserShipper } from './browser_shipper'; - -describe('ElasticV3BrowserShipper', () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'test-event-type', - context: {}, - properties: {}, - }, - ]; - - const initContext: AnalyticsClientInitContext = { - sendTo: 'staging', - isDev: true, - logger: loggerMock.create(), - }; - - let shipper: ElasticV3BrowserShipper; - - let fetchMock: jest.Mock; - - beforeEach(() => { - jest.useFakeTimers(); - - fetchMock = jest.fn().mockResolvedValue({ - status: 200, - ok: true, - text: () => Promise.resolve('{"status": "ok"}'), - }); - - Object.defineProperty(global, 'fetch', { - value: fetchMock, - writable: true, - }); - - shipper = new ElasticV3BrowserShipper( - { version: '1.2.3', channelName: 'test-channel', debug: true }, - initContext - ); - }); - - afterEach(() => { - shipper.shutdown(); - jest.useRealTimers(); - }); - - test("custom sendTo overrides Analytics client's", () => { - const prodShipper = new ElasticV3BrowserShipper( - { version: '1.2.3', channelName: 'test-channel', debug: true, sendTo: 'production' }, - initContext - ); - - // eslint-disable-next-line dot-notation - expect(prodShipper['url']).not.toEqual(shipper['url']); - }); - - test('set optIn should update the isOptedIn$ observable', () => { - // eslint-disable-next-line dot-notation - const internalOptIn$ = shipper['isOptedIn$']; - - // Initially undefined - expect(internalOptIn$.value).toBeUndefined(); - - shipper.optIn(true); - expect(internalOptIn$.value).toBe(true); - - shipper.optIn(false); - expect(internalOptIn$.value).toBe(false); - }); - - test('set extendContext should store local values: clusterUuid and licenseId', () => { - // eslint-disable-next-line dot-notation - const getInternalClusterUuid = () => shipper['clusterUuid']; - // eslint-disable-next-line dot-notation - const getInternalLicenseId = () => shipper['licenseId']; - - // Initial values - expect(getInternalClusterUuid()).toBe('UNKNOWN'); - expect(getInternalLicenseId()).toBeUndefined(); - - shipper.extendContext({ cluster_uuid: 'test-cluster-uuid' }); - expect(getInternalClusterUuid()).toBe('test-cluster-uuid'); - expect(getInternalLicenseId()).toBeUndefined(); - - shipper.extendContext({ license_id: 'test-license-id' }); - expect(getInternalClusterUuid()).toBe('test-cluster-uuid'); - expect(getInternalLicenseId()).toBe('test-license-id'); - - shipper.extendContext({ cluster_uuid: 'test-cluster-uuid-2', license_id: 'test-license-id-2' }); - expect(getInternalClusterUuid()).toBe('test-cluster-uuid-2'); - expect(getInternalLicenseId()).toBe('test-license-id-2'); - }); - - test('calls to reportEvents do not call `fetch` straight away (buffer of 1s)', () => { - shipper.reportEvents(events); - expect(fetchMock).not.toHaveBeenCalled(); - }); - - test('calls to reportEvents do not call `fetch` after 1s because no optIn value is set yet', async () => { - shipper.reportEvents(events); - await jest.advanceTimersByTimeAsync(1000); - expect(fetchMock).not.toHaveBeenCalled(); - }); - - test('calls to reportEvents call `fetch` after 1s when optIn value is set to true', async () => { - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - await jest.advanceTimersByTimeAsync(1000); - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - keepalive: true, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "200", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_browser", - "type": "succeeded", - } - `); - }); - - test('calls to reportEvents do not call `fetch` after 1s when optIn value is set to false', async () => { - shipper.reportEvents(events); - shipper.optIn(false); - await jest.advanceTimersByTimeAsync(1000); - expect(fetchMock).not.toHaveBeenCalled(); - }); - - test('calls to flush forces the client to send all the pending events', async () => { - shipper.optIn(true); - shipper.reportEvents(events); - const counter = firstValueFrom(shipper.telemetryCounter$); - await shipper.flush(); - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - keepalive: true, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "200", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_browser", - "type": "succeeded", - } - `); - }); - - test('calls to flush resolve immediately if there is nothing to send', async () => { - shipper.optIn(true); - await shipper.flush(); - expect(fetchMock).toHaveBeenCalledTimes(0); - }); - - test('calling flush multiple times does not keep hanging', async () => { - await expect(shipper.flush()).resolves.toBe(undefined); - await expect(shipper.flush()).resolves.toBe(undefined); - await Promise.all([shipper.flush(), shipper.flush()]); - }); - - test('calling flush after shutdown does not keep hanging', async () => { - shipper.shutdown(); - await expect(shipper.flush()).resolves.toBe(undefined); - }); - - test('calls to reportEvents call `fetch` when shutting down if optIn value is set to true', async () => { - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - shipper.shutdown(); - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - keepalive: true, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "200", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_browser", - "type": "succeeded", - } - `); - }); - - test('does not add the query.debug: true property to the request if the shipper is not set with the debug flag', async () => { - shipper = new ElasticV3BrowserShipper( - { version: '1.2.3', channelName: 'test-channel' }, - initContext - ); - shipper.reportEvents(events); - shipper.optIn(true); - await jest.advanceTimersByTimeAsync(1000); - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - keepalive: true, - method: 'POST', - } - ); - }); - - test('handles when the fetch request fails', async () => { - fetchMock.mockRejectedValueOnce(new Error('Failed to fetch')); - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - await jest.advanceTimersByTimeAsync(1000); - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - keepalive: true, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "Failed to fetch", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_browser", - "type": "failed", - } - `); - }); - - test('handles when the fetch request fails (request completes but not OK response)', async () => { - fetchMock.mockResolvedValue({ - ok: false, - status: 400, - text: () => Promise.resolve('{"status": "not ok"}'), - }); - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - await jest.advanceTimersByTimeAsync(1000); - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - keepalive: true, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "400", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_browser", - "type": "failed", - } - `); - }); -}); diff --git a/packages/analytics/ebt/shippers/elastic_v3/browser/src/browser_shipper.ts b/packages/analytics/ebt/shippers/elastic_v3/browser/src/browser_shipper.ts deleted file mode 100644 index c063dcf86a95f..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/browser/src/browser_shipper.ts +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { - BehaviorSubject, - interval, - Subject, - bufferWhen, - concatMap, - skipWhile, - firstValueFrom, - map, - merge, -} from 'rxjs'; -import type { - AnalyticsClientInitContext, - Event, - EventContext, - IShipper, - TelemetryCounter, -} from '../../../../client'; -import { ElasticV3ShipperOptions, ErrorWithCode } from '../../common'; -import { buildHeaders, buildUrl, createTelemetryCounterHelper, eventsToNDJSON } from '../../common'; - -/** - * Elastic V3 shipper to use in the browser. - */ -export class ElasticV3BrowserShipper implements IShipper { - /** Shipper's unique name */ - public static shipperName = 'elastic_v3_browser'; - - /** Observable to emit the stats of the processed events. */ - public readonly telemetryCounter$ = new Subject(); - - private readonly reportTelemetryCounters = createTelemetryCounterHelper( - this.telemetryCounter$, - ElasticV3BrowserShipper.shipperName - ); - private readonly url: string; - - private readonly internalQueue$ = new Subject(); - private readonly flush$ = new Subject(); - private readonly queueFlushed$ = new Subject(); - - private readonly isOptedIn$ = new BehaviorSubject(undefined); - private clusterUuid: string = 'UNKNOWN'; - private licenseId: string | undefined; - - /** - * Creates a new instance of the {@link ElasticV3BrowserShipper}. - * @param options {@link ElasticV3ShipperOptions} - * @param initContext {@link AnalyticsClientInitContext} - */ - constructor( - private readonly options: ElasticV3ShipperOptions, - private readonly initContext: AnalyticsClientInitContext - ) { - this.setUpInternalQueueSubscriber(); - this.url = buildUrl({ - sendTo: options.sendTo ?? initContext.sendTo, - channelName: options.channelName, - }); - } - - /** - * Uses the `cluster_uuid` and `license_id` from the context to hold them in memory for the generation of the headers - * used later on in the HTTP request. - * @param newContext The full new context to set {@link EventContext} - */ - public extendContext(newContext: EventContext) { - if (newContext.cluster_uuid) { - this.clusterUuid = newContext.cluster_uuid; - } - if (newContext.license_id) { - this.licenseId = newContext.license_id; - } - } - - /** - * When `false`, it flushes the internal queue and stops sending events. - * @param isOptedIn `true` for resume sending events. `false` to stop. - */ - public optIn(isOptedIn: boolean) { - this.isOptedIn$.next(isOptedIn); - } - - /** - * Enqueues the events to be sent to in a batched approach. - * @param events batched events {@link Event} - */ - public reportEvents(events: Event[]) { - events.forEach((event) => { - this.internalQueue$.next(event); - }); - } - - /** - * Triggers a flush of the internal queue to attempt to send any events held in the queue - * and resolves the returned promise once the queue is emptied. - */ - public async flush() { - if (this.flush$.isStopped) { - // If called after shutdown, return straight away - return; - } - - const promise = firstValueFrom(this.queueFlushed$); - this.flush$.next(); - await promise; - } - - /** - * Shuts down the shipper. - * Triggers a flush of the internal queue to attempt to send any events held in the queue. - */ - public shutdown() { - this.internalQueue$.complete(); // NOTE: When completing the observable, the buffer logic does not wait and releases any buffered events. - this.flush$.complete(); - } - - private setUpInternalQueueSubscriber() { - this.internalQueue$ - .pipe( - // Buffer events for 1 second or until we have an optIn value - bufferWhen(() => - merge( - this.flush$, - interval(1000).pipe(skipWhile(() => this.isOptedIn$.value === undefined)) - ) - ), - // Send events (one batch at a time) - concatMap(async (events) => { - // Only send if opted-in and there's anything to send - if (this.isOptedIn$.value === true && events.length > 0) { - await this.sendEvents(events); - } - }), - map(() => this.queueFlushed$.next()) - ) - .subscribe(); - } - - private async sendEvents(events: Event[]) { - try { - const code = await this.makeRequest(events); - this.reportTelemetryCounters(events, { code }); - } catch (error) { - this.reportTelemetryCounters(events, { code: error.code, error }); - } - } - - private async makeRequest(events: Event[]): Promise { - const response = await fetch(this.url, { - method: 'POST', - body: eventsToNDJSON(events), - headers: buildHeaders(this.clusterUuid, this.options.version, this.licenseId), - ...(this.options.debug && { query: { debug: true } }), - // Allow the request to outlive the page in case the tab is closed - keepalive: true, - }); - - if (this.options.debug) { - this.initContext.logger.debug( - `[${ElasticV3BrowserShipper.shipperName}]: ${response.status} - ${await response.text()}` - ); - } - - if (!response.ok) { - throw new ErrorWithCode( - `${response.status} - ${await response.text()}`, - `${response.status}` - ); - } - - return `${response.status}`; - } -} diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/README.md b/packages/analytics/ebt/shippers/elastic_v3/common/README.md deleted file mode 100644 index f212c75961d86..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# @kbn/ebt/shippers/elastic_v3/common - -This package holds the common code for the Elastic V3 shippers: - -- Types defining the Shipper configuration `ElasticV3ShipperOptions` -- `buildUrl` utility helps decide which URL to use depending on whether the shipper is configured to send to production or staging. -- `eventsToNdjson` utility converts any array of events to NDJSON format. -- `reportTelemetryCounters` helps with building the TelemetryCounter to emit after processing an event. - -It should be considered an internal package and should not be used other than by the shipper implementations: `@kbn/ebt/shippers/elastic_v3/browser` and `@kbn/ebt/shippers/elastic_v3/server` diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/index.ts b/packages/analytics/ebt/shippers/elastic_v3/common/index.ts deleted file mode 100644 index c832c30664300..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { buildHeaders } from './src/build_headers'; -export { buildUrl } from './src/build_url'; -export type { BuildUrlOptions } from './src/build_url'; -export { ErrorWithCode } from './src/error_with_code'; -export { eventsToNDJSON } from './src/events_to_ndjson'; -export { createTelemetryCounterHelper } from './src/report_telemetry_counters'; -export type { ElasticV3ShipperOptions } from './src/types'; diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/build_url.ts b/packages/analytics/ebt/shippers/elastic_v3/common/src/build_url.ts deleted file mode 100644 index 6b1ba324f0c37..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/build_url.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -/** The options to build the URL of the V3 API. */ -export interface BuildUrlOptions { - /** Whether to send it to production or staging. */ - sendTo: 'production' | 'staging'; - /** The name of the channel to send the data to. */ - channelName: string; -} - -/** - * Builds the URL for the V3 API. - * @param urlOptions The options to build the URL of the V3 API. - */ -export function buildUrl(urlOptions: BuildUrlOptions): string { - const { sendTo, channelName } = urlOptions; - const baseUrl = - sendTo === 'production' - ? 'https://telemetry.elastic.co' - : 'https://telemetry-staging.elastic.co'; - return `${baseUrl}/v3/send/${channelName}`; -} diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/error_with_code.test.ts b/packages/analytics/ebt/shippers/elastic_v3/common/src/error_with_code.test.ts deleted file mode 100644 index 9be5d5bdc762c..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/error_with_code.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { ErrorWithCode } from './error_with_code'; - -describe('ErrorWithCode', () => { - const error = new ErrorWithCode('test', 'test_code'); - test('message and code properties are publicly accessible', () => { - expect(error.message).toBe('test'); - expect(error.code).toBe('test_code'); - }); - test('extends error', () => { - expect(error).toBeInstanceOf(Error); - }); -}); diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/events_to_ndjson.test.ts b/packages/analytics/ebt/shippers/elastic_v3/common/src/events_to_ndjson.test.ts deleted file mode 100644 index c9bcb58bb1977..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/events_to_ndjson.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { Event } from '../../../../client'; -import { eventsToNDJSON } from './events_to_ndjson'; - -describe('eventsToNDJSON', () => { - test('works with one event', () => { - const event: Event = { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type', - context: {}, - properties: {}, - }; - - // Mind the extra line at the bottom - expect(eventsToNDJSON([event])).toMatchInlineSnapshot(` - "{\\"timestamp\\":\\"2020-01-01T00:00:00.000Z\\",\\"event_type\\":\\"event_type\\",\\"context\\":{},\\"properties\\":{}} - " - `); - }); - - test('works with many events', () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type', - context: {}, - properties: {}, - }, - { - timestamp: '2020-01-02T00:00:00.000Z', - event_type: 'event_type', - context: {}, - properties: {}, - }, - ]; - - expect(eventsToNDJSON(events)).toMatchInlineSnapshot(` - "{\\"timestamp\\":\\"2020-01-01T00:00:00.000Z\\",\\"event_type\\":\\"event_type\\",\\"context\\":{},\\"properties\\":{}} - {\\"timestamp\\":\\"2020-01-02T00:00:00.000Z\\",\\"event_type\\":\\"event_type\\",\\"context\\":{},\\"properties\\":{}} - " - `); - }); -}); diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/report_telemetry_counters.test.ts b/packages/analytics/ebt/shippers/elastic_v3/common/src/report_telemetry_counters.test.ts deleted file mode 100644 index a720a0c0129a6..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/report_telemetry_counters.test.ts +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { firstValueFrom, Subject, take, toArray } from 'rxjs'; -import type { Event, TelemetryCounter } from '../../../../client'; -import { createTelemetryCounterHelper } from './report_telemetry_counters'; - -describe('reportTelemetryCounters', () => { - let reportTelemetryCounters: ReturnType; - let telemetryCounter$: Subject; - - beforeEach(() => { - telemetryCounter$ = new Subject(); - reportTelemetryCounters = createTelemetryCounterHelper(telemetryCounter$, 'my_shipper'); - }); - - test('emits a success counter for one event', async () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_a', - context: {}, - properties: {}, - }, - ]; - - const counters = firstValueFrom(telemetryCounter$); - - reportTelemetryCounters(events); - - await expect(counters).resolves.toMatchInlineSnapshot(` - Object { - "code": "OK", - "count": 1, - "event_type": "event_type_a", - "source": "my_shipper", - "type": "succeeded", - } - `); - }); - - test('emits a success counter for one event with custom code', async () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_a', - context: {}, - properties: {}, - }, - ]; - - const counters = firstValueFrom(telemetryCounter$); - - reportTelemetryCounters(events, { code: 'my_code' }); - - await expect(counters).resolves.toMatchInlineSnapshot(` - Object { - "code": "my_code", - "count": 1, - "event_type": "event_type_a", - "source": "my_shipper", - "type": "succeeded", - } - `); - }); - - test('emits a counter with custom type', async () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_a', - context: {}, - properties: {}, - }, - ]; - - const counters = firstValueFrom(telemetryCounter$); - - reportTelemetryCounters(events, { - type: 'dropped', - code: 'my_code', - }); - - await expect(counters).resolves.toMatchInlineSnapshot(` - Object { - "code": "my_code", - "count": 1, - "event_type": "event_type_a", - "source": "my_shipper", - "type": "dropped", - } - `); - }); - - test('emits a failure counter for one event with error message as a code', async () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_a', - context: {}, - properties: {}, - }, - ]; - - const counters = firstValueFrom(telemetryCounter$); - - reportTelemetryCounters(events, { - error: new Error('Something went terribly wrong'), - }); - - await expect(counters).resolves.toMatchInlineSnapshot(` - Object { - "code": "Something went terribly wrong", - "count": 1, - "event_type": "event_type_a", - "source": "my_shipper", - "type": "failed", - } - `); - }); - - test('emits a failure counter for one event with custom code', async () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_a', - context: {}, - properties: {}, - }, - ]; - - const counters = firstValueFrom(telemetryCounter$); - - reportTelemetryCounters(events, { - code: 'my_code', - error: new Error('Something went terribly wrong'), - }); - - await expect(counters).resolves.toMatchInlineSnapshot(` - Object { - "code": "my_code", - "count": 1, - "event_type": "event_type_a", - "source": "my_shipper", - "type": "failed", - } - `); - }); - - test('emits a success counter for multiple events of different types', async () => { - const events: Event[] = [ - // 2 types a - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_a', - context: {}, - properties: {}, - }, - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_a', - context: {}, - properties: {}, - }, - // 1 type b - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'event_type_b', - context: {}, - properties: {}, - }, - ]; - - const counters = firstValueFrom(telemetryCounter$.pipe(take(2), toArray())); - - reportTelemetryCounters(events); - - await expect(counters).resolves.toMatchInlineSnapshot(` - Array [ - Object { - "code": "OK", - "count": 2, - "event_type": "event_type_a", - "source": "my_shipper", - "type": "succeeded", - }, - Object { - "code": "OK", - "count": 1, - "event_type": "event_type_b", - "source": "my_shipper", - "type": "succeeded", - }, - ] - `); - }); -}); diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/report_telemetry_counters.ts b/packages/analytics/ebt/shippers/elastic_v3/common/src/report_telemetry_counters.ts deleted file mode 100644 index 68260e653e78d..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/report_telemetry_counters.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { Subject } from 'rxjs'; -import type { Event, TelemetryCounter, TelemetryCounterType } from '../../../../client'; - -/** - * Creates a telemetry counter helper to make it easier to generate them - * @param telemetryCounter$ The observable that will be used to emit the telemetry counters - * @param source The name of the shipper that is sending the events. - */ -export function createTelemetryCounterHelper( - telemetryCounter$: Subject, - source: string -) { - /** - * Triggers a telemetry counter for each event type. - * @param events The events to trigger the telemetry counter for. - * @param type The type of telemetry counter to trigger. - * @param code The success or error code for additional detail about the result. - * @param error The error that occurred, if any. - */ - return ( - events: Event[], - { - type, - code, - error, - }: { - type?: TelemetryCounterType; - code?: string; - error?: Error; - } = {} - ) => { - const eventTypeCounts = countEventTypes(events); - Object.entries(eventTypeCounts).forEach(([eventType, count]) => { - telemetryCounter$.next({ - source, - type: type ?? (error ? 'failed' : 'succeeded'), - code: code ?? error?.message ?? 'OK', - count, - event_type: eventType, - }); - }); - }; -} - -function countEventTypes(events: Event[]) { - return events.reduce((acc, event) => { - if (acc[event.event_type]) { - acc[event.event_type] += 1; - } else { - acc[event.event_type] = 1; - } - return acc; - }, {} as Record); -} diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/types.ts b/packages/analytics/ebt/shippers/elastic_v3/common/src/types.ts deleted file mode 100644 index c27aa448119fe..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/types.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -/** - * Options for the Elastic V3 shipper - */ -export interface ElasticV3ShipperOptions { - /** - * The name of the channel to stream all the events to. - */ - channelName: string; - /** - * The product's version. - */ - version: string; - /** - * Provide it to override the Analytics client's default configuration. - */ - sendTo?: 'staging' | 'production'; - /** - * Should show debug information about the requests it makes to the V3 API. - */ - debug?: boolean; -} diff --git a/packages/analytics/ebt/shippers/elastic_v3/server/README.md b/packages/analytics/ebt/shippers/elastic_v3/server/README.md deleted file mode 100644 index 0c27cef5a0023..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/server/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# @kbn/ebt/shippers/elastic_v3/server - -Server-side implementation of the Elastic V3 shipper for the `@kbn/ebt/client`. - -## How to use it - -This module is intended to be used **on the server-side only**. It is specially designed to apply the necessary backpressure mechanisms to prevent the server from getting overloaded with too many events and identify if the server sits behind a firewall to discard any incoming events. Refer to `@kbn/ebt/shippers/elastic_v3/browser` for the browser-side implementation. - -```typescript -import { ElasticV3ServerShipper } from "@kbn/ebt/shippers/elastic_v3/server"; - -analytics.registerShipper(ElasticV3ServerShipper, { channelName: 'myChannel', version: '1.0.0' }); -``` - -## Configuration - -| Name | Description | -|:-------------:|:-------------------------------------------------------------------------------------------| -| `channelName` | The name of the channel to send the events. | -| `version` | The version of the application generating the events. | -| `debug` | When `true`, it logs the responses from the remote Telemetry Service. Defaults to `false`. | - -## Transmission protocol - -This shipper sends the events to the Elastic Internal Telemetry Service. It holds up to 1000 events in a shared queue. Any additional incoming events once it's full will be dropped. It sends the events from the queue in batches of up to 10kB every 10 seconds. When shutting down, it'll send all the remaining events in the queue. diff --git a/packages/analytics/ebt/shippers/elastic_v3/server/index.ts b/packages/analytics/ebt/shippers/elastic_v3/server/index.ts deleted file mode 100644 index c0031aac4b217..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/server/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export type { ElasticV3ShipperOptions } from '../common'; -export { ElasticV3ServerShipper } from './src/server_shipper'; diff --git a/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.test.ts b/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.test.ts deleted file mode 100644 index 1e973ed4c9819..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.test.ts +++ /dev/null @@ -1,571 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { loggerMock } from '@kbn/logging-mocks'; -import { firstValueFrom } from 'rxjs'; -import type { AnalyticsClientInitContext, Event } from '../../../../client'; -import { fetchMock } from './server_shipper.test.mocks'; -import { ElasticV3ServerShipper } from './server_shipper'; - -const SECONDS = 1000; -const MINUTES = 60 * SECONDS; - -describe('ElasticV3ServerShipper', () => { - const events: Event[] = [ - { - timestamp: '2020-01-01T00:00:00.000Z', - event_type: 'test-event-type', - context: {}, - properties: {}, - }, - ]; - - const initContext: AnalyticsClientInitContext = { - sendTo: 'staging', - isDev: true, - logger: loggerMock.create(), - }; - - let shipper: ElasticV3ServerShipper; - - // eslint-disable-next-line dot-notation - const setLastBatchSent = (ms: number) => (shipper['lastBatchSent'] = ms); - - beforeEach(() => { - jest.useFakeTimers({ legacyFakeTimers: false }); - - shipper = new ElasticV3ServerShipper( - { version: '1.2.3', channelName: 'test-channel', debug: true }, - initContext - ); - // eslint-disable-next-line dot-notation - shipper['firstTimeOffline'] = null; // The tests think connectivity is OK initially for easier testing. - }); - - afterEach(() => { - shipper.shutdown(); - jest.clearAllMocks(); - }); - - test('set optIn should update the isOptedIn$ observable', () => { - // eslint-disable-next-line dot-notation - const getInternalOptIn = () => shipper['isOptedIn$'].value; - - // Initially undefined - expect(getInternalOptIn()).toBeUndefined(); - - shipper.optIn(true); - expect(getInternalOptIn()).toBe(true); - - shipper.optIn(false); - expect(getInternalOptIn()).toBe(false); - }); - - test('clears the queue after optIn: false', () => { - shipper.reportEvents(events); - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(1); - - shipper.optIn(false); - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(0); - }); - - test('set extendContext should store local values: clusterUuid and licenseId', () => { - // eslint-disable-next-line dot-notation - const getInternalClusterUuid = () => shipper['clusterUuid']; - // eslint-disable-next-line dot-notation - const getInternalLicenseId = () => shipper['licenseId']; - - // Initial values - expect(getInternalClusterUuid()).toBe('UNKNOWN'); - expect(getInternalLicenseId()).toBeUndefined(); - - shipper.extendContext({ cluster_uuid: 'test-cluster-uuid' }); - expect(getInternalClusterUuid()).toBe('test-cluster-uuid'); - expect(getInternalLicenseId()).toBeUndefined(); - - shipper.extendContext({ license_id: 'test-license-id' }); - expect(getInternalClusterUuid()).toBe('test-cluster-uuid'); - expect(getInternalLicenseId()).toBe('test-license-id'); - - shipper.extendContext({ cluster_uuid: 'test-cluster-uuid-2', license_id: 'test-license-id-2' }); - expect(getInternalClusterUuid()).toBe('test-cluster-uuid-2'); - expect(getInternalLicenseId()).toBe('test-license-id-2'); - }); - - test('calls to reportEvents do not call `fetch` straight away', () => { - shipper.reportEvents(events); - expect(fetchMock).not.toHaveBeenCalled(); - }); - - test('calls to reportEvents do not call `fetch` after 10 minutes because no optIn value is set yet', async () => { - shipper.reportEvents(events); - await jest.advanceTimersByTimeAsync(10 * MINUTES); - expect(fetchMock).not.toHaveBeenCalled(); - }); - - test('calls to reportEvents call `fetch` after 10 seconds when optIn value is set to true', async () => { - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - setLastBatchSent(Date.now() - 10 * SECONDS); - await jest.advanceTimersByTimeAsync(1 * SECONDS); // Moving 1 second should be enough to trigger the logic - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "200", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_server", - "type": "succeeded", - } - `); - }); - - test('calls to reportEvents do not call `fetch` after 10 seconds when optIn value is set to false', async () => { - shipper.reportEvents(events); - shipper.optIn(false); - setLastBatchSent(Date.now() - 10 * SECONDS); - await jest.advanceTimersByTimeAsync(1 * SECONDS); // Moving 1 second should be enough to trigger the logic - expect(fetchMock).not.toHaveBeenCalled(); - }); - - test('calls to reportEvents call `fetch` when shutting down if optIn value is set to true', async () => { - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - shipper.shutdown(); - jest.advanceTimersToNextTimer(); // We are handling the shutdown in a promise, so we need to wait for the next tick. - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "200", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_server", - "type": "succeeded", - } - `); - }); - - test('does not add the query.debug: true property to the request if the shipper is not set with the debug flag', async () => { - shipper = new ElasticV3ServerShipper( - { version: '1.2.3', channelName: 'test-channel' }, - initContext - ); - // eslint-disable-next-line dot-notation - shipper['firstTimeOffline'] = null; - shipper.reportEvents(events); - shipper.optIn(true); - setLastBatchSent(Date.now() - 10 * SECONDS); - await jest.advanceTimersByTimeAsync(1 * SECONDS); // Moving 1 second should be enough to trigger the logic - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - } - ); - }); - - test('sends when the queue overflows the 10kB leaky bucket one batch every 10s', async () => { - expect.assertions(2 * 9 + 2); - - shipper.reportEvents(new Array(1000).fill(events[0])); - shipper.optIn(true); - - // Due to the size of the test events, it matches 8 rounds. - for (let i = 0; i < 9; i++) { - const counter = firstValueFrom(shipper.telemetryCounter$); - setLastBatchSent(Date.now() - 10 * SECONDS); - await jest.advanceTimersByTimeAsync(1 * SECONDS); // Moving 1 second should be enough to trigger the logic - expect(fetchMock).toHaveBeenNthCalledWith( - i + 1, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: new Array(103) - .fill( - '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n' - ) - .join(''), - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "200", - "count": 103, - "event_type": "test-event-type", - "source": "elastic_v3_server", - "type": "succeeded", - } - `); - jest.advanceTimersToNextTimer(); - } - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(1000 - 9 * 103); // 73 - - // If we call it again, it should not enqueue all the events (only the ones to fill the queue): - shipper.reportEvents(new Array(1000).fill(events[0])); - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(1000); - }); - - test('handles when the fetch request fails', async () => { - fetchMock.mockRejectedValueOnce(new Error('Failed to fetch')); - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - setLastBatchSent(Date.now() - 10 * SECONDS); - await jest.advanceTimersByTimeAsync(1 * SECONDS); // Moving 1 second should be enough to trigger the logic - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "Failed to fetch", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_server", - "type": "failed", - } - `); - }); - - test('handles when the fetch request fails (request completes but not OK response)', async () => { - fetchMock.mockResolvedValueOnce({ - ok: false, - status: 400, - text: () => Promise.resolve('{"status": "not ok"}'), - }); - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - setLastBatchSent(Date.now() - 10 * SECONDS); - await jest.advanceTimersByTimeAsync(1 * SECONDS); // Moving 1 second should be enough to trigger the logic - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "400", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_server", - "type": "failed", - } - `); - }); - - describe('Connectivity Checks', () => { - describe('connectivity check when connectivity is confirmed (firstTimeOffline === null)', () => { - test.each([undefined, false, true])('does not run for opt-in %p', async (optInValue) => { - if (optInValue !== undefined) { - shipper.optIn(optInValue); - } - - // From the start, it doesn't check connectivity because already confirmed - expect(fetchMock).not.toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - - // Wait a big time (1 minute should be enough, but for the sake of tests...) - await jest.advanceTimersByTimeAsync(10 * MINUTES); - - expect(fetchMock).not.toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - }); - }); - - describe('connectivity check with initial unknown state of the connectivity', () => { - beforeEach(() => { - // eslint-disable-next-line dot-notation - shipper['firstTimeOffline'] = undefined; // Initial unknown state of the connectivity - }); - - test.each([undefined, false])('does not run for opt-in %p', async (optInValue) => { - if (optInValue !== undefined) { - shipper.optIn(optInValue); - } - - // From the start, it doesn't check connectivity because already confirmed - expect(fetchMock).not.toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - - // Wait a big time (1 minute should be enough, but for the sake of tests...) - await jest.advanceTimersByTimeAsync(10 * MINUTES); - - expect(fetchMock).not.toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - }); - - test('runs as soon as opt-in is set to true', () => { - shipper.optIn(true); - - // From the start, it doesn't check connectivity because opt-in is not true - expect(fetchMock).toHaveBeenNthCalledWith( - 1, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - }); - }); - - describe('connectivity check with the connectivity confirmed to be faulty', () => { - beforeEach(() => { - // eslint-disable-next-line dot-notation - shipper['firstTimeOffline'] = 100; // Failed at some point - }); - - test.each([undefined, false])('does not run for opt-in %p', async (optInValue) => { - if (optInValue !== undefined) { - shipper.optIn(optInValue); - } - - // From the start, it doesn't check connectivity because already confirmed - expect(fetchMock).not.toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - - // Wait a big time (1 minute should be enough, but for the sake of tests...) - await jest.advanceTimersByTimeAsync(10 * MINUTES); - - expect(fetchMock).not.toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - }); - - test('runs as soon as opt-in is set to true', () => { - shipper.optIn(true); - - // From the start, it doesn't check connectivity because opt-in is not true - expect(fetchMock).toHaveBeenNthCalledWith( - 1, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - }); - }); - - describe('after report failure', () => { - // generate the report failure for each test - beforeEach(async () => { - fetchMock.mockRejectedValueOnce(new Error('Failed to fetch')); - shipper.reportEvents(events); - shipper.optIn(true); - const counter = firstValueFrom(shipper.telemetryCounter$); - setLastBatchSent(Date.now() - 10 * SECONDS); - await jest.advanceTimersByTimeAsync(1 * SECONDS); // Moving 1 second should be enough to trigger the logic - expect(fetchMock).toHaveBeenNthCalledWith( - 1, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - query: { debug: true }, - } - ); - await expect(counter).resolves.toMatchInlineSnapshot(` - Object { - "code": "Failed to fetch", - "count": 1, - "event_type": "test-event-type", - "source": "elastic_v3_server", - "type": "failed", - } - `); - }); - - test('connectivity check runs periodically', async () => { - fetchMock.mockRejectedValueOnce(new Error('Failed to fetch')); - await jest.advanceTimersByTimeAsync(1 * MINUTES); - expect(fetchMock).toHaveBeenNthCalledWith( - 2, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - fetchMock.mockResolvedValueOnce({ ok: false }); - await jest.advanceTimersByTimeAsync(2 * MINUTES); - expect(fetchMock).toHaveBeenNthCalledWith( - 3, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - }); - }); - - describe('after being offline for longer than 24h', () => { - beforeEach(() => { - shipper.optIn(true); - shipper.reportEvents(events); - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(1); - // eslint-disable-next-line dot-notation - shipper['firstTimeOffline'] = 100; - }); - - test('the following connectivity check clears the queue', async () => { - fetchMock.mockRejectedValueOnce(new Error('Failed to fetch')); - await jest.advanceTimersByTimeAsync(1 * MINUTES); - expect(fetchMock).toHaveBeenNthCalledWith( - 1, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(0); - }); - - test('new events are not added to the queue', async () => { - fetchMock.mockRejectedValueOnce(new Error('Failed to fetch')); - await jest.advanceTimersByTimeAsync(1 * MINUTES); - expect(fetchMock).toHaveBeenNthCalledWith( - 1, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(0); - - shipper.reportEvents(events); - // eslint-disable-next-line dot-notation - expect(shipper['internalQueue'].length).toBe(0); - }); - - test('regains the connection', async () => { - fetchMock.mockResolvedValueOnce({ ok: true }); - await jest.advanceTimersByTimeAsync(1 * MINUTES); - expect(fetchMock).toHaveBeenNthCalledWith( - 1, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - // eslint-disable-next-line dot-notation - expect(shipper['firstTimeOffline']).toBe(null); - - await jest.advanceTimersByTimeAsync(10 * MINUTES); - expect(fetchMock).not.toHaveBeenNthCalledWith( - 2, - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { method: 'OPTIONS' } - ); - }); - }); - }); - - describe('flush method', () => { - test('resolves straight away if it should not send anything', async () => { - await expect(shipper.flush()).resolves.toBe(undefined); - }); - - test('resolves when all the ongoing requests are complete', async () => { - shipper.optIn(true); - shipper.reportEvents(events); - expect(fetchMock).toHaveBeenCalledTimes(0); - fetchMock.mockImplementation(async () => { - // eslint-disable-next-line dot-notation - expect(shipper['inFlightRequests$'].value).toBe(1); - }); - await expect(shipper.flush()).resolves.toBe(undefined); - expect(fetchMock).toHaveBeenCalledWith( - 'https://telemetry-staging.elastic.co/v3/send/test-channel', - { - body: '{"timestamp":"2020-01-01T00:00:00.000Z","event_type":"test-event-type","context":{},"properties":{}}\n', - headers: { - 'content-type': 'application/x-ndjson', - 'x-elastic-cluster-id': 'UNKNOWN', - 'x-elastic-stack-version': '1.2.3', - }, - method: 'POST', - query: { debug: true }, - } - ); - }); - - test('calling flush multiple times does not keep hanging', async () => { - await expect(shipper.flush()).resolves.toBe(undefined); - await expect(shipper.flush()).resolves.toBe(undefined); - await Promise.all([shipper.flush(), shipper.flush()]); - }); - - test('calling flush after shutdown does not keep hanging', async () => { - shipper.shutdown(); - await expect(shipper.flush()).resolves.toBe(undefined); - }); - }); -}); diff --git a/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.ts b/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.ts deleted file mode 100644 index d3b54da3314cf..0000000000000 --- a/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.ts +++ /dev/null @@ -1,370 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import fetch from 'node-fetch'; -import { - filter, - Subject, - ReplaySubject, - interval, - merge, - timer, - retryWhen, - tap, - delayWhen, - takeUntil, - map, - BehaviorSubject, - exhaustMap, - mergeMap, - skip, - firstValueFrom, -} from 'rxjs'; -import { - type ElasticV3ShipperOptions, - buildHeaders, - buildUrl, - createTelemetryCounterHelper, - eventsToNDJSON, - ErrorWithCode, -} from '../../common'; -import type { - AnalyticsClientInitContext, - Event, - EventContext, - IShipper, - TelemetryCounter, -} from '../../../../client'; - -const SECOND = 1000; -const MINUTE = 60 * SECOND; -const HOUR = 60 * MINUTE; -const KIB = 1024; -const MAX_NUMBER_OF_EVENTS_IN_INTERNAL_QUEUE = 1000; -const MIN_TIME_SINCE_LAST_SEND = 10 * SECOND; - -/** - * Elastic V3 shipper to use on the server side. - */ -export class ElasticV3ServerShipper implements IShipper { - /** Shipper's unique name */ - public static shipperName = 'elastic_v3_server'; - - /** Observable to emit the stats of the processed events. */ - public readonly telemetryCounter$ = new Subject(); - - private readonly reportTelemetryCounters = createTelemetryCounterHelper( - this.telemetryCounter$, - ElasticV3ServerShipper.shipperName - ); - - private readonly internalQueue: Event[] = []; - private readonly shutdown$ = new ReplaySubject(1); - private readonly flush$ = new Subject(); - private readonly inFlightRequests$ = new BehaviorSubject(0); - private readonly isOptedIn$ = new BehaviorSubject(undefined); - - private readonly url: string; - - private lastBatchSent = Date.now(); - - private clusterUuid: string = 'UNKNOWN'; - private licenseId?: string; - - /** - * Specifies when it went offline: - * - `undefined` means it doesn't know yet whether it is online or offline - * - `null` means it's online - * - `number` means it's offline since that time - * @private - */ - private firstTimeOffline?: number | null; - - /** - * Creates a new instance of the {@link ElasticV3ServerShipper}. - * @param options {@link ElasticV3ShipperOptions} - * @param initContext {@link AnalyticsClientInitContext} - */ - constructor( - private readonly options: ElasticV3ShipperOptions, - private readonly initContext: AnalyticsClientInitContext - ) { - this.url = buildUrl({ - sendTo: options.sendTo ?? initContext.sendTo, - channelName: options.channelName, - }); - this.setInternalSubscriber(); - this.checkConnectivity(); - } - - /** - * Uses the `cluster_uuid` and `license_id` from the context to hold them in memory for the generation of the headers - * used later on in the HTTP request. - * @param newContext The full new context to set {@link EventContext} - */ - public extendContext(newContext: EventContext) { - if (newContext.cluster_uuid) { - this.clusterUuid = newContext.cluster_uuid; - } - if (newContext.license_id) { - this.licenseId = newContext.license_id; - } - } - - /** - * When `false`, it flushes the internal queue and stops sending events. - * @param isOptedIn `true` for resume sending events. `false` to stop. - */ - public optIn(isOptedIn: boolean) { - this.isOptedIn$.next(isOptedIn); - - if (isOptedIn === false) { - this.internalQueue.length = 0; - } - } - - /** - * Enqueues the events to be sent via the leaky bucket algorithm. - * @param events batched events {@link Event} - */ - public reportEvents(events: Event[]) { - // If opted out OR offline for longer than 24 hours, skip processing any events. - if ( - this.isOptedIn$.value === false || - (this.firstTimeOffline && Date.now() - this.firstTimeOffline > 24 * HOUR) - ) { - return; - } - - const freeSpace = MAX_NUMBER_OF_EVENTS_IN_INTERNAL_QUEUE - this.internalQueue.length; - - // As per design, we only want store up-to 1000 events at a time. Drop anything that goes beyond that limit - if (freeSpace < events.length) { - const toDrop = events.length - freeSpace; - const droppedEvents = events.splice(-toDrop, toDrop); - this.reportTelemetryCounters(droppedEvents, { - type: 'dropped', - code: 'queue_full', - }); - } - - this.internalQueue.push(...events); - } - - /** - * Triggers a flush of the internal queue to attempt to send any events held in the queue - * and resolves the returned promise once the queue is emptied. - */ - public async flush() { - if (this.flush$.isStopped) { - // If called after shutdown, return straight away - return; - } - - const promise = firstValueFrom( - this.inFlightRequests$.pipe( - skip(1), // Skipping the first value because BehaviourSubjects always emit the current value on subscribe. - filter((count) => count === 0) // Wait until all the inflight requests are completed. - ) - ); - this.flush$.next(); - await promise; - } - - /** - * Shuts down the shipper. - * Triggers a flush of the internal queue to attempt to send any events held in the queue. - */ - public shutdown() { - this.shutdown$.next(); - this.flush$.complete(); - this.shutdown$.complete(); - this.isOptedIn$.complete(); - } - - /** - * Checks the server has connectivity to the remote endpoint. - * The frequency of the connectivity tests will back off, starting with 1 minute, and multiplying by 2 - * until it reaches 1 hour. Then, it’ll keep the 1h frequency until it reaches 24h without connectivity. - * At that point, it clears the queue and stops accepting events in the queue. - * The connectivity checks will continue to happen every 1 hour just in case it regains it at any point. - * @private - */ - private checkConnectivity() { - let backoff = 1 * MINUTE; - merge( - timer(0, 1 * MINUTE), - // Also react to opt-in changes to avoid being stalled for 1 minute for the first connectivity check. - // More details in: https://github.com/elastic/kibana/issues/135647 - this.isOptedIn$ - ) - .pipe( - takeUntil(this.shutdown$), - filter(() => this.isOptedIn$.value === true && this.firstTimeOffline !== null), - // Using exhaustMap here because one request at a time is enough to check the connectivity. - exhaustMap(async () => { - const { ok } = await fetch(this.url, { - method: 'OPTIONS', - }); - - if (!ok) { - throw new Error(`Failed to connect to ${this.url}`); - } - - this.firstTimeOffline = null; - backoff = 1 * MINUTE; - }), - retryWhen((errors) => - errors.pipe( - takeUntil(this.shutdown$), - tap(() => { - if (!this.firstTimeOffline) { - this.firstTimeOffline = Date.now(); - } else if (Date.now() - this.firstTimeOffline > 24 * HOUR) { - this.internalQueue.length = 0; - } - backoff = backoff * 2; - if (backoff > 1 * HOUR) { - backoff = 1 * HOUR; - } - }), - delayWhen(() => timer(backoff)) - ) - ) - ) - .subscribe(); - } - - private setInternalSubscriber() { - // Create an emitter that emits when MIN_TIME_SINCE_LAST_SEND have passed since the last time we sent the data - const minimumTimeSinceLastSent$ = interval(SECOND).pipe( - filter(() => Date.now() - this.lastBatchSent >= MIN_TIME_SINCE_LAST_SEND) - ); - - merge( - minimumTimeSinceLastSent$.pipe( - takeUntil(this.shutdown$), - map(() => ({ shouldFlush: false })) - ), - // Whenever a `flush` request comes in - this.flush$.pipe(map(() => ({ shouldFlush: true }))), - // Attempt to send one last time on shutdown, flushing the queue - this.shutdown$.pipe(map(() => ({ shouldFlush: true }))) - ) - .pipe( - // Only move ahead if it's opted-in and online, and there are some events in the queue - filter(() => { - const shouldSendAnything = - this.isOptedIn$.value === true && - this.firstTimeOffline === null && - this.internalQueue.length > 0; - - // If it should not send anything, re-emit the inflight request observable just in case it's already 0 - if (!shouldSendAnything) { - this.inFlightRequests$.next(this.inFlightRequests$.value); - } - - return shouldSendAnything; - }), - - // Send the events: - // 1. Set lastBatchSent and retrieve the events to send (clearing the queue) in a synchronous operation to avoid race conditions. - map(({ shouldFlush }) => { - this.lastBatchSent = Date.now(); - return this.getEventsToSend(shouldFlush); - }), - // 2. Skip empty buffers (just to be sure) - filter((events) => events.length > 0), - // 3. Actually send the events - // Using `mergeMap` here because we want to send events whenever the emitter says so: - // We don't want to skip emissions (exhaustMap) or enqueue them (concatMap). - mergeMap((eventsToSend) => this.sendEvents(eventsToSend)) - ) - .subscribe(); - } - - /** - * Calculates the size of the queue in bytes. - * @returns The number of bytes held in the queue. - * @private - */ - private getQueueByteSize(queue: Event[]) { - return queue.reduce((acc, event) => { - return acc + this.getEventSize(event); - }, 0); - } - - /** - * Calculates the size of the event in bytes. - * @param event The event to calculate the size of. - * @returns The number of bytes held in the event. - * @private - */ - private getEventSize(event: Event) { - return Buffer.from(JSON.stringify(event)).length; - } - - /** - * Returns a queue of events of up-to 10kB. Or all events in the queue if it's a FLUSH action. - * @remarks It mutates the internal queue by removing from it the events returned by this method. - * @private - */ - private getEventsToSend(shouldFlush: boolean): Event[] { - // If the internal queue is already smaller than the minimum batch size, or it's a flush action, do a direct assignment. - if (shouldFlush || this.getQueueByteSize(this.internalQueue) < 10 * KIB) { - return this.internalQueue.splice(0, this.internalQueue.length); - } - // Otherwise, we'll feed the events to the leaky bucket queue until we reach 10kB. - const queue: Event[] = []; - let queueByteSize = 0; - while (queueByteSize < 10 * KIB) { - const event = this.internalQueue.shift()!; - queueByteSize += this.getEventSize(event); - queue.push(event); - } - return queue; - } - - private async sendEvents(events: Event[]) { - this.initContext.logger.debug(`Reporting ${events.length} events...`); - this.inFlightRequests$.next(this.inFlightRequests$.value + 1); - try { - const code = await this.makeRequest(events); - this.reportTelemetryCounters(events, { code }); - this.initContext.logger.debug(`Reported ${events.length} events...`); - } catch (error) { - this.initContext.logger.debug(`Failed to report ${events.length} events...`); - this.initContext.logger.debug(error); - this.reportTelemetryCounters(events, { code: error.code, error }); - this.firstTimeOffline = undefined; - } - this.inFlightRequests$.next(Math.max(0, this.inFlightRequests$.value - 1)); - } - - private async makeRequest(events: Event[]): Promise { - const response = await fetch(this.url, { - method: 'POST', - body: eventsToNDJSON(events), - headers: buildHeaders(this.clusterUuid, this.options.version, this.licenseId), - ...(this.options.debug && { query: { debug: true } }), - }); - - if (this.options.debug) { - this.initContext.logger.debug(`${response.status} - ${await response.text()}`); - } - - if (!response.ok) { - throw new ErrorWithCode( - `${response.status} - ${await response.text()}`, - `${response.status}` - ); - } - - return `${response.status}`; - } -} diff --git a/packages/analytics/ebt/shippers/fullstory/README.md b/packages/analytics/ebt/shippers/fullstory/README.md deleted file mode 100644 index a1e557a7600b8..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# @kbn/ebt/shippers/fullstory - -FullStory implementation as a shipper for the `@kbn/ebt/client`. - -## How to use it - -This module is intended to be used **on the browser only**. It does not support server-side events. - -```typescript -import { FullStoryShipper } from "@kbn/ebt/shippers/fullstory"; - -analytics.registerShipper(FullStoryShipper, { fullStoryOrgId: '12345' }) -``` - -## Configuration - -| Name | Description | -|:----------------:|:----------------------------------------------------------------------------------------------------------------------------------| -| `fullStoryOrgId` | FullStory account ID | -| `host` | The host to send the data to. Used to overcome AdBlockers by using custom DNSs. If not specified, it defaults to `fullstory.com`. | -| `scriptUrl` | The URL to load the FullStory client from. Falls back to `edge.fullstory.com/s/fs.js` if not specified. | -| `debug` | Whether the debug logs should be printed to the console. Defaults to `false`. | -| `namespace` | The name of the variable where the API is stored: `window[namespace]`. Defaults to `FS`. | - -## FullStory Custom Events Rate Limits - -FullStory limits the number of custom events that can be sent per second ([docs](https://help.fullstory.com/hc/en-us/articles/360020623234#custom-property-rate-limiting)). In order to comply with that limit, this shipper will only emit the event types registered in the allow-list defined in the constant [CUSTOM_EVENT_TYPES_ALLOWLIST](./src/fullstory_shipper.ts). We may change this behaviour in the future to a remotely-controlled list of events or rely on the opt-in _cherry-pick_ config mechanism of the Analytics Client. - -## Transmission protocol - -This shipper relies on FullStory official snippet. The internals about how it transfers the data are not documented. diff --git a/packages/analytics/ebt/shippers/fullstory/index.ts b/packages/analytics/ebt/shippers/fullstory/index.ts deleted file mode 100644 index 18c8ba5d36c26..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export { FullStoryShipper } from './src/fullstory_shipper'; -export type { FullStoryShipperConfig } from './src/fullstory_shipper'; -export type { FullStorySnippetConfig } from './src/load_snippet'; diff --git a/packages/analytics/ebt/shippers/fullstory/src/format_payload.test.ts b/packages/analytics/ebt/shippers/fullstory/src/format_payload.test.ts deleted file mode 100644 index 6f9ad05bc9da7..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/format_payload.test.ts +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { formatPayload } from './format_payload'; - -describe('formatPayload', () => { - test('appends `_str` to string values', () => { - const payload = { - foo: 'bar', - baz: ['qux'], - }; - - expect(formatPayload(payload)).toEqual({ - foo_str: payload.foo, - baz_strs: payload.baz, - }); - }); - - test('appends `_int` to integer values', () => { - const payload = { - foo: 1, - baz: [100000], - }; - - expect(formatPayload(payload)).toEqual({ - foo_int: payload.foo, - baz_ints: payload.baz, - }); - }); - - test('appends `_real` to integer values', () => { - const payload = { - foo: 1.5, - baz: [100000.5], - }; - - expect(formatPayload(payload)).toEqual({ - foo_real: payload.foo, - baz_reals: payload.baz, - }); - }); - - test('appends `_bool` to booleans values', () => { - const payload = { - foo: true, - baz: [false], - }; - - expect(formatPayload(payload)).toEqual({ - foo_bool: payload.foo, - baz_bools: payload.baz, - }); - }); - - test('appends `_date` to Date values', () => { - const payload = { - foo: new Date(), - baz: [new Date()], - }; - - expect(formatPayload(payload)).toEqual({ - foo_date: payload.foo, - baz_dates: payload.baz, - }); - }); - - test('supports nested values', () => { - const payload = { - nested: { - foo: 'bar', - baz: ['qux'], - }, - }; - - expect(formatPayload(payload)).toEqual({ - nested: { - foo_str: payload.nested.foo, - baz_strs: payload.nested.baz, - }, - }); - }); - - test('does not mutate reserved keys', () => { - const payload = { - uid: 'uid', - displayName: 'displayName', - email: 'email', - acctId: 'acctId', - website: 'website', - pageName: 'pageName', - }; - - expect(formatPayload(payload)).toEqual(payload); - }); - - test('removes undefined values', () => { - const payload = { - foo: undefined, - baz: [undefined], - }; - - expect(formatPayload(payload)).toEqual({}); - }); - - test('throws if null is provided', () => { - const payload = { - foo: null, - baz: [null], - }; - - expect(() => formatPayload(payload)).toThrowErrorMatchingInlineSnapshot( - `"Unsupported type: object"` - ); - }); - - describe('String to Date identification', () => { - test('appends `_date` to ISO string values', () => { - const payload = { - foo: new Date().toISOString(), - baz: [new Date().toISOString()], - }; - - expect(formatPayload(payload)).toEqual({ - foo_date: payload.foo, - baz_dates: payload.baz, - }); - }); - - test('appends `_str` to random string values', () => { - const payload = { - foo: 'test-1', - baz: ['test-1'], - }; - - expect(formatPayload(payload)).toEqual({ - foo_str: payload.foo, - baz_strs: payload.baz, - }); - }); - }); -}); diff --git a/packages/analytics/ebt/shippers/fullstory/src/format_payload.ts b/packages/analytics/ebt/shippers/fullstory/src/format_payload.ts deleted file mode 100644 index 03873617af8fc..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/format_payload.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import moment from 'moment'; - -// https://help.fullstory.com/hc/en-us/articles/360020623234#reserved-properties -const FULLSTORY_RESERVED_PROPERTIES = [ - 'uid', - 'displayName', - 'email', - 'acctId', - 'website', - // https://developer.fullstory.com/page-variables - 'pageName', -]; - -export function formatPayload(context: object): Record { - // format context keys as required for env vars, see docs: https://help.fullstory.com/hc/en-us/articles/360020623234 - return Object.fromEntries( - Object.entries(context) - // Discard any undefined values - .map<[string, unknown]>(([key, value]) => { - return Array.isArray(value) - ? [key, value.filter((v) => typeof v !== 'undefined')] - : [key, value]; - }) - .filter( - ([, value]) => typeof value !== 'undefined' && (!Array.isArray(value) || value.length > 0) - ) - // Transform key names according to the FullStory needs - .map(([key, value]) => { - if (FULLSTORY_RESERVED_PROPERTIES.includes(key)) { - return [key, value]; - } - if (isRecord(value)) { - return [key, formatPayload(value)]; - } - const valueType = getFullStoryType(value); - const formattedKey = valueType ? `${key}_${valueType}` : key; - return [formattedKey, value]; - }) - ); -} - -function getFullStoryType(value: unknown) { - // For arrays, make the decision based on the first element - const isArray = Array.isArray(value); - const v = isArray ? value[0] : value; - let type: string; - switch (typeof v) { - case 'string': - type = moment(v, moment.ISO_8601, true).isValid() ? 'date' : 'str'; - break; - case 'number': - type = Number.isInteger(v) ? 'int' : 'real'; - break; - case 'boolean': - type = 'bool'; - break; - case 'object': - if (isDate(v)) { - type = 'date'; - break; - } - default: - throw new Error(`Unsupported type: ${typeof v}`); - } - - // convert to plural form for arrays - return isArray ? `${type}s` : type; -} - -function isRecord(value: unknown): value is Record { - return typeof value === 'object' && value !== null && !Array.isArray(value) && !isDate(value); -} - -function isDate(value: unknown): value is Date { - return value instanceof Date; -} diff --git a/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.test.mocks.ts b/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.test.mocks.ts deleted file mode 100644 index 7608606c39395..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.test.mocks.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import * as RxJS from 'rxjs'; -import type { FullStoryApi } from './types'; - -export const fullStoryApiMock: jest.Mocked = { - identify: jest.fn(), - setUserVars: jest.fn(), - setVars: jest.fn(), - consent: jest.fn(), - restart: jest.fn(), - shutdown: jest.fn(), - event: jest.fn(), -}; -jest.doMock('./load_snippet', () => { - return { - loadSnippet: () => fullStoryApiMock, - }; -}); - -jest.doMock('rxjs', () => { - return { - ...RxJS, - debounceTime: () => RxJS.identity, - }; -}); diff --git a/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.test.ts b/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.test.ts deleted file mode 100644 index 88f53fd7f837d..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.test.ts +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { loggerMock } from '@kbn/logging-mocks'; -import { fullStoryApiMock } from './fullstory_shipper.test.mocks'; -import { FullStoryShipper } from './fullstory_shipper'; - -describe('FullStoryShipper', () => { - let fullstoryShipper: FullStoryShipper; - - beforeEach(() => { - jest.resetAllMocks(); - fullstoryShipper = new FullStoryShipper( - { - debug: true, - fullStoryOrgId: 'test-org-id', - }, - { - logger: loggerMock.create(), - sendTo: 'staging', - isDev: true, - } - ); - }); - - afterEach(() => { - fullstoryShipper.shutdown(); - }); - - describe('extendContext', () => { - describe('FS.identify', () => { - test('calls `identify` when the userId is provided', () => { - const userId = 'test-user-id'; - fullstoryShipper.extendContext({ userId }); - expect(fullStoryApiMock.identify).toHaveBeenCalledWith(userId); - }); - - test('calls `identify` again only if the userId changes', () => { - const userId = 'test-user-id'; - fullstoryShipper.extendContext({ userId }); - expect(fullStoryApiMock.identify).toHaveBeenCalledTimes(1); - expect(fullStoryApiMock.identify).toHaveBeenCalledWith(userId); - - fullstoryShipper.extendContext({ userId }); - expect(fullStoryApiMock.identify).toHaveBeenCalledTimes(1); // still only called once - - fullstoryShipper.extendContext({ userId: `${userId}-1` }); - expect(fullStoryApiMock.identify).toHaveBeenCalledTimes(2); // called again because the user changed - expect(fullStoryApiMock.identify).toHaveBeenCalledWith(`${userId}-1`); - }); - }); - - describe('FS.setUserVars', () => { - test('calls `setUserVars` when isElasticCloudUser: true is provided', () => { - fullstoryShipper.extendContext({ isElasticCloudUser: true }); - expect(fullStoryApiMock.setUserVars).toHaveBeenCalledWith({ - // eslint-disable-next-line @typescript-eslint/naming-convention - isElasticCloudUser_bool: true, - }); - }); - - test('calls `setUserVars` when isElasticCloudUser: false is provided', () => { - fullstoryShipper.extendContext({ isElasticCloudUser: false }); - expect(fullStoryApiMock.setUserVars).toHaveBeenCalledWith({ - // eslint-disable-next-line @typescript-eslint/naming-convention - isElasticCloudUser_bool: false, - }); - }); - }); - - describe('FS.setVars', () => { - test('calls `setVars` when version is provided', () => { - fullstoryShipper.extendContext({ version: '1.2.3' }); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { - version_str: '1.2.3', - version_major_int: 1, - version_minor_int: 2, - version_patch_int: 3, - }); - }); - - test('calls `setVars` when cloudId is provided', () => { - fullstoryShipper.extendContext({ cloudId: 'test-es-org-id' }); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { - // eslint-disable-next-line @typescript-eslint/naming-convention - cloudId_str: 'test-es-org-id', - }); - }); - - test('merges both: version and cloudId if both are provided', () => { - fullstoryShipper.extendContext({ version: '1.2.3', cloudId: 'test-es-org-id' }); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { - // eslint-disable-next-line @typescript-eslint/naming-convention - cloudId_str: 'test-es-org-id', - version_str: '1.2.3', - version_major_int: 1, - version_minor_int: 2, - version_patch_int: 3, - }); - }); - - test('adds the rest of the context to `setVars` (only if they match one of the valid keys)', () => { - const context = { - userId: 'test-user-id', - version: '1.2.3', - cloudId: 'test-es-org-id', - labels: { serverless: 'test' }, - foo: 'bar', - }; - fullstoryShipper.extendContext(context); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { - version_str: '1.2.3', - version_major_int: 1, - version_minor_int: 2, - version_patch_int: 3, - // eslint-disable-next-line @typescript-eslint/naming-convention - cloudId_str: 'test-es-org-id', - labels: { serverless_str: 'test' }, - }); - }); - - test('emits once only if nothing changes', () => { - const context = { - userId: 'test-user-id', - version: '1.2.3', - cloudId: 'test-es-org-id', - labels: { serverless: 'test' }, - foo: 'bar', - }; - fullstoryShipper.extendContext(context); - fullstoryShipper.extendContext(context); - expect(fullStoryApiMock.setVars).toHaveBeenCalledTimes(1); - fullstoryShipper.extendContext(context); - expect(fullStoryApiMock.setVars).toHaveBeenCalledTimes(1); - }); - }); - }); - - describe('optIn', () => { - test('should call consent true and restart when isOptIn: true', () => { - fullstoryShipper.optIn(true); - expect(fullStoryApiMock.consent).toHaveBeenCalledWith(true); - expect(fullStoryApiMock.restart).toHaveBeenCalled(); - }); - - test('should call consent false and shutdown when isOptIn: false', () => { - fullstoryShipper.optIn(false); - expect(fullStoryApiMock.consent).toHaveBeenCalledWith(false); - expect(fullStoryApiMock.shutdown).toHaveBeenCalled(); - }); - }); - - describe('reportEvents', () => { - test('calls the API once per event in the array with the properties transformed', () => { - fullstoryShipper.reportEvents([ - { - event_type: 'test-event-1', - timestamp: '2020-01-01T00:00:00.000Z', - properties: { test: 'test-1' }, - context: { pageName: 'test-page-1' }, - }, - { - event_type: 'test-event-2', - timestamp: '2020-01-01T00:00:00.000Z', - properties: { other_property: 'test-2' }, - context: { pageName: 'test-page-1' }, - }, - ]); - - expect(fullStoryApiMock.event).toHaveBeenCalledTimes(2); - expect(fullStoryApiMock.event).toHaveBeenCalledWith('test-event-1', { - test_str: 'test-1', - }); - expect(fullStoryApiMock.event).toHaveBeenCalledWith('test-event-2', { - other_property_str: 'test-2', - }); - }); - - test('filters the events by the allow-list', () => { - fullstoryShipper = new FullStoryShipper( - { - eventTypesAllowlist: ['valid-event-1', 'valid-event-2'], - debug: true, - fullStoryOrgId: 'test-org-id', - }, - { - logger: loggerMock.create(), - sendTo: 'staging', - isDev: true, - } - ); - fullstoryShipper.reportEvents([ - { - event_type: 'test-event-1', // Should be filtered out. - timestamp: '2020-01-01T00:00:00.000Z', - properties: { test: 'test-1' }, - context: { pageName: 'test-page-1' }, - }, - { - event_type: 'valid-event-1', - timestamp: '2020-01-01T00:00:00.000Z', - properties: { test: 'test-1' }, - context: { pageName: 'test-page-1' }, - }, - { - event_type: 'valid-event-2', - timestamp: '2020-01-01T00:00:00.000Z', - properties: { test: 'test-2' }, - context: { pageName: 'test-page-1' }, - }, - ]); - - expect(fullStoryApiMock.event).toHaveBeenCalledTimes(2); - expect(fullStoryApiMock.event).toHaveBeenCalledWith('valid-event-1', { - test_str: 'test-1', - }); - expect(fullStoryApiMock.event).toHaveBeenCalledWith('valid-event-2', { - test_str: 'test-2', - }); - }); - }); -}); diff --git a/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.ts b/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.ts deleted file mode 100644 index c078348368eb0..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/fullstory_shipper.ts +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { Subject, distinct, debounceTime, map, filter, Subscription } from 'rxjs'; -import { get, has } from 'lodash'; -import { set } from '@kbn/safer-lodash-set'; -import type { AnalyticsClientInitContext, EventContext, Event, IShipper } from '../../../client'; -import type { FullStoryApi } from './types'; -import type { FullStorySnippetConfig } from './load_snippet'; -import { formatPayload } from './format_payload'; -import { loadSnippet } from './load_snippet'; -import { getParsedVersion } from './get_parsed_version'; - -const PAGE_VARS_KEYS = [ - // Page-specific keys - 'pageName', - 'page', - 'entityId', - 'applicationId', - - // Deployment-specific keys - 'version', // x4, split to version_major, version_minor, version_patch for easier filtering - 'buildSha', // Useful for Serverless - 'cloudId', - 'deploymentId', - 'projectId', // projectId and deploymentId are mutually exclusive. They shouldn't be sent in the same offering. - 'cluster_name', - 'cluster_uuid', - 'cluster_version', - 'labels.serverless', - 'license_id', - 'license_status', - 'license_type', - - // Session-specific - 'session_id', - 'preferred_languages', -] as const; - -/** - * FullStory shipper configuration. - */ -export interface FullStoryShipperConfig extends FullStorySnippetConfig { - /** - * FullStory's custom events rate limit is very aggressive. - * If this setting is provided, it'll only send the event types specified in this list. - */ - eventTypesAllowlist?: string[]; - /** - * FullStory only allows calling setVars('page') once per navigation. - * This setting defines how much time to hold from calling the API while additional lazy context is being resolved. - */ - pageVarsDebounceTimeMs?: number; -} - -interface FullStoryUserVars { - userId?: string; - isElasticCloudUser?: boolean; - cloudIsElasticStaffOwned?: boolean; - cloudTrialEndDate?: string; -} - -type FullStoryPageContext = Pick; - -/** - * FullStory shipper. - */ -export class FullStoryShipper implements IShipper { - /** Shipper's unique name */ - public static shipperName = 'FullStory'; - - private readonly fullStoryApi: FullStoryApi; - private lastUserId: string | undefined; - private readonly eventTypesAllowlist?: string[]; - private readonly pageContext$ = new Subject(); - private readonly userContext$ = new Subject(); - private readonly subscriptions = new Subscription(); - - /** - * Creates a new instance of the FullStoryShipper. - * @param config {@link FullStoryShipperConfig} - * @param initContext {@link AnalyticsClientInitContext} - */ - constructor( - config: FullStoryShipperConfig, - private readonly initContext: AnalyticsClientInitContext - ) { - const { eventTypesAllowlist, pageVarsDebounceTimeMs = 500, ...snippetConfig } = config; - this.fullStoryApi = loadSnippet(snippetConfig); - this.eventTypesAllowlist = eventTypesAllowlist; - - this.subscriptions.add( - this.userContext$ - .pipe( - distinct(({ userId, isElasticCloudUser, cloudIsElasticStaffOwned, cloudTrialEndDate }) => - [userId, isElasticCloudUser, cloudIsElasticStaffOwned, cloudTrialEndDate].join('-') - ) - ) - .subscribe((userVars) => this.updateUserVars(userVars)) - ); - - this.subscriptions.add( - this.pageContext$ - .pipe( - map((newContext) => { - // Cherry-picking fields because FS limits the number of fields that can be sent. - // > Note: You can capture up to 20 unique page properties (exclusive of pageName) for any given page - // > and up to 500 unique page properties across all pages. - // https://help.fullstory.com/hc/en-us/articles/1500004101581-FS-setVars-API-Sending-custom-page-data-to-FullStory - return PAGE_VARS_KEYS.reduce((acc, key) => { - if (has(newContext, key)) { - set(acc, key, get(newContext, key)); - } - return acc; - }, {} as Partial & Record); - }), - filter((pageVars) => Object.keys(pageVars).length > 0), - // Wait for anything to actually change. - distinct((pageVars) => { - const sortedKeys = Object.keys(pageVars).sort(); - return sortedKeys.map((key) => pageVars[key]).join('-'); - }), - // We need some debounce time to ensure everything is updated before calling FS because some properties cannot be changed twice for the same URL. - debounceTime(pageVarsDebounceTimeMs) - ) - .subscribe((pageVars) => { - this.initContext.logger.debug( - () => `Calling FS.setVars with context ${JSON.stringify(pageVars)}` - ); - this.fullStoryApi.setVars('page', { - ...formatPayload(pageVars), - ...(pageVars.version ? getParsedVersion(pageVars.version) : {}), - }); - }) - ); - } - - /** - * Calls `fs.identify`, `fs.setUserVars` and `fs.setVars` depending on the fields provided in the newContext. - * @param newContext The full new context to set {@link EventContext} - */ - public extendContext(newContext: EventContext): void { - this.initContext.logger.debug(() => `Received context ${JSON.stringify(newContext)}`); - - // FullStory requires different APIs for different type of contexts: - // User-level context. - this.userContext$.next(newContext); - // Event-level context. At the moment, only the scope `page` is supported by FullStory for webapps. - this.pageContext$.next(newContext); - } - - /** - * Stops/restarts the shipping mechanism based on the value of isOptedIn - * @param isOptedIn `true` for resume sending events. `false` to stop. - */ - public optIn(isOptedIn: boolean): void { - this.initContext.logger.debug(`Setting FS to optIn ${isOptedIn}`); - // FullStory uses 2 different opt-in methods: - // - `consent` is needed to allow collecting information about the components - // declared as "Record with user consent" (https://help.fullstory.com/hc/en-us/articles/360020623574). - // We need to explicitly call `consent` if for the "Record with user content" feature to work. - this.fullStoryApi.consent(isOptedIn); - // - `restart` and `shutdown` fully start/stop the collection of data. - if (isOptedIn) { - this.fullStoryApi.restart(); - } else { - this.fullStoryApi.shutdown(); - } - } - - /** - * Filters the events by the eventTypesAllowlist from the config. - * Then it transforms the event into a FS valid format and calls `fs.event`. - * @param events batched events {@link Event} - */ - public reportEvents(events: Event[]): void { - this.initContext.logger.debug(`Reporting ${events.length} events to FS`); - events - .filter((event) => this.eventTypesAllowlist?.includes(event.event_type) ?? true) - .forEach((event) => { - // We only read event.properties and discard the rest because the context is already sent in the other APIs. - this.fullStoryApi.event(event.event_type, formatPayload(event.properties)); - }); - } - - /** - * Flushes all internal queues of the shipper. - * It doesn't really do anything inside because this shipper doesn't hold any internal queues. - */ - public async flush() {} - - /** - * Shuts down the shipper. - */ - public shutdown() { - this.subscriptions.unsubscribe(); - } - - private updateUserVars({ - userId, - isElasticCloudUser, - cloudIsElasticStaffOwned, - cloudTrialEndDate, - }: FullStoryUserVars) { - // Call it only when the userId changes - if (userId && userId !== this.lastUserId) { - this.initContext.logger.debug(`Calling FS.identify with userId ${userId}`); - // We need to call the API for every new userId (restarting the session). - this.fullStoryApi.identify(userId); - this.lastUserId = userId; - } - - // User-level context - if ( - typeof isElasticCloudUser === 'boolean' || - typeof cloudIsElasticStaffOwned === 'boolean' || - cloudTrialEndDate - ) { - const userVars = { - isElasticCloudUser, - cloudIsElasticStaffOwned, - cloudTrialEndDate, - }; - this.initContext.logger.debug( - () => `Calling FS.setUserVars with ${JSON.stringify(userVars)}` - ); - this.fullStoryApi.setUserVars(formatPayload(userVars)); - } - } -} diff --git a/packages/analytics/ebt/shippers/fullstory/src/get_parsed_version.test.ts b/packages/analytics/ebt/shippers/fullstory/src/get_parsed_version.test.ts deleted file mode 100644 index b4938dbca3bc4..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/get_parsed_version.test.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { getParsedVersion } from './get_parsed_version'; - -describe('getParsedVersion', () => { - test('parses a version string', () => { - expect(getParsedVersion('1.2.3')).toEqual({ - version_str: '1.2.3', - version_major_int: 1, - version_minor_int: 2, - version_patch_int: 3, - }); - }); - - test('parses a version string with extra label', () => { - expect(getParsedVersion('1.2.3-SNAPSHOT')).toEqual({ - version_str: '1.2.3-SNAPSHOT', - version_major_int: 1, - version_minor_int: 2, - version_patch_int: 3, - }); - }); - - test('does not throw for invalid version', () => { - expect(getParsedVersion('INVALID_VERSION')).toEqual({ - version_str: 'INVALID_VERSION', - version_major_int: NaN, - version_minor_int: NaN, - version_patch_int: NaN, - }); - }); -}); diff --git a/packages/analytics/ebt/shippers/fullstory/src/get_parsed_version.ts b/packages/analytics/ebt/shippers/fullstory/src/get_parsed_version.ts deleted file mode 100644 index 873b47a0cde8a..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/get_parsed_version.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export function getParsedVersion(version: string): { - version_str: string; - version_major_int: number; - version_minor_int: number; - version_patch_int: number; -} { - const [major, minor, patch] = version.split('.'); - return { - version_str: version, - version_major_int: parseInt(major, 10), - version_minor_int: parseInt(minor, 10), - version_patch_int: parseInt(patch, 10), - }; -} diff --git a/packages/analytics/ebt/shippers/fullstory/src/load_snippet.test.ts b/packages/analytics/ebt/shippers/fullstory/src/load_snippet.test.ts deleted file mode 100644 index 002f113f71f63..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/load_snippet.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { loadSnippet } from './load_snippet'; - -describe('loadSnippet', () => { - beforeAll(() => { - // Define necessary window and document global variables for the tests - jest - .spyOn(global.document, 'getElementsByTagName') - .mockReturnValue([ - { parentNode: { insertBefore: jest.fn() } }, - ] as unknown as HTMLCollectionOf); - }); - - it('should return the FullStory API', () => { - const fullStoryApi = loadSnippet({ debug: true, fullStoryOrgId: 'foo' }); - expect(fullStoryApi).toBeDefined(); - expect(fullStoryApi.event).toBeDefined(); - expect(fullStoryApi.consent).toBeDefined(); - expect(fullStoryApi.restart).toBeDefined(); - expect(fullStoryApi.shutdown).toBeDefined(); - expect(fullStoryApi.identify).toBeDefined(); - expect(fullStoryApi.setUserVars).toBeDefined(); - expect(fullStoryApi.setVars).toBeDefined(); - }); -}); diff --git a/packages/analytics/ebt/shippers/fullstory/src/load_snippet.ts b/packages/analytics/ebt/shippers/fullstory/src/load_snippet.ts deleted file mode 100644 index 1cbcc96e201ef..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/load_snippet.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { FullStoryApi } from './types'; - -/** - * FullStory basic configuration. - */ -export interface FullStorySnippetConfig { - /** - * The FullStory account id. - */ - fullStoryOrgId: string; - /** - * The host to send the data to. Used to overcome AdBlockers by using custom DNSs. - * If not specified, it defaults to `fullstory.com`. - */ - host?: string; - /** - * The URL to load the FullStory client from. Falls back to `edge.fullstory.com/s/fs.js` if not specified. - */ - scriptUrl?: string; - /** - * Whether the debug logs should be printed to the console. - */ - debug?: boolean; - /** - * The name of the variable where the API is stored: `window[namespace]`. Defaults to `FS`. - */ - namespace?: string; -} - -export function loadSnippet({ - scriptUrl = 'https://edge.fullstory.com/s/fs.js', - fullStoryOrgId, - host = 'fullstory.com', - namespace = 'FS', - debug = false, -}: FullStorySnippetConfig): FullStoryApi { - window._fs_debug = debug; - window._fs_host = host; - window._fs_script = scriptUrl; - window._fs_org = fullStoryOrgId; - window._fs_namespace = namespace; - - /* eslint-disable dot-notation,prettier/prettier,@typescript-eslint/no-shadow,prefer-rest-params,@typescript-eslint/no-unused-expressions */ - (function(m,n,e,t,l,o,g,y){ - if (e in m) {if(m.console && m.console.log) { m.console.log('FullStory namespace conflict. Please set window["_fs_namespace"].');} return;} - // @ts-expect-error - g=m[e]=function(a,b,s){g.q?g.q.push([a,b,s]):g._api(a,b,s);};g.q=[]; - // @ts-expect-error - o=n.createElement(t);o.async=1;o.crossOrigin='anonymous';o.src=_fs_script; - // @ts-expect-error - y=n.getElementsByTagName(t)[0];y.parentNode.insertBefore(o,y); - // @ts-expect-error - g.identify=function(i,v,s){g(l,{uid:i},s);if(v)g(l,v,s)};g.setUserVars=function(v,s){g(l,v,s)};g.event=function(i,v,s){g('event',{n:i,p:v},s)}; - // @ts-expect-error - g.anonymize=function(){g.identify(!!0)}; - // @ts-expect-error - g.shutdown=function(){g("rec",!1)};g.restart=function(){g("rec",!0)}; - // @ts-expect-error - g.log = function(a,b){g("log",[a,b])}; - // @ts-expect-error - g.consent=function(a){g("consent",!arguments.length||a)}; - // @ts-expect-error - g.identifyAccount=function(i,v){o='account';v=v||{};v.acctId=i;g(o,v)}; - // @ts-expect-error - g.clearUserCookie=function(){}; - // @ts-expect-error - g.setVars=function(n, p){g('setVars',[n,p]);}; - // @ts-expect-error - g._w={};y='XMLHttpRequest';g._w[y]=m[y];y='fetch';g._w[y]=m[y]; - // @ts-expect-error - if(m[y])m[y]=function(){return g._w[y].apply(this,arguments)}; - // @ts-expect-error - g._v="1.3.0"; - - })(window,document,window['_fs_namespace'],'script','user'); - - const fullStoryApi = window[namespace as 'FS']; - - if (!fullStoryApi) { - throw new Error('FullStory snippet failed to load. Check browser logs for more information.'); - } - - return fullStoryApi; -} diff --git a/packages/analytics/ebt/shippers/fullstory/src/types.ts b/packages/analytics/ebt/shippers/fullstory/src/types.ts deleted file mode 100644 index 6c448c2c4d2e1..0000000000000 --- a/packages/analytics/ebt/shippers/fullstory/src/types.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -/** - * Definition of the FullStory API. - * Docs are available at https://developer.fullstory.com/. - */ -export interface FullStoryApi { - /** - * Identify a User - * https://developer.fullstory.com/identify - * @param userId - * @param userVars - */ - identify(userId: string, userVars?: Record): void; - - /** - * Set User Variables - * https://developer.fullstory.com/user-variables - * @param userVars - */ - setUserVars(userVars: Record): void; - - /** - * Setting page variables - * https://developer.fullstory.com/page-variables - * @param scope - * @param pageProperties - */ - setVars(scope: 'page', pageProperties: Record): void; - - /** - * Sending custom event data into FullStory - * https://developer.fullstory.com/custom-events - * @param eventName - * @param eventProperties - */ - event(eventName: string, eventProperties: Record): void; - - /** - * Selectively record parts of your site based on explicit user consent - * https://developer.fullstory.com/consent - * @param isOptedIn true if the user has opted in to tracking - */ - consent(isOptedIn: boolean): void; - - /** - * Restart session recording after it has been shutdown - * https://developer.fullstory.com/restart-recording - */ - restart(): void; - - /** - * Stop recording a session - * https://developer.fullstory.com/stop-recording - */ - shutdown(): void; -} - -declare global { - interface Window { - _fs_debug: boolean; - _fs_host: string; - _fs_org: string; - _fs_namespace: string; - _fs_script: string; - FS: FullStoryApi; - } -} diff --git a/packages/analytics/ebt/tsconfig.json b/packages/analytics/ebt/tsconfig.json deleted file mode 100644 index 38e6caee5d2a1..0000000000000 --- a/packages/analytics/ebt/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "target/types", - "types": [ - "jest", - "node", - "react" - ] - }, - "include": [ - "**/*.ts", - "**/*.tsx", - ], - "exclude": [ - "target/**/*" - ], - "kbn_references": [ - "@kbn/logging-mocks", - "@kbn/logging", - "@kbn/safer-lodash-set", - ] -} diff --git a/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts b/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts index ec9d9e05aff23..ef023e5122840 100644 --- a/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts +++ b/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { AnalyticsClient } from '@kbn/ebt/client'; +import { AnalyticsClient } from '@elastic/ebt/client'; import { Subject } from 'rxjs'; export const analyticsClientMock: jest.Mocked = { @@ -21,6 +21,6 @@ export const analyticsClientMock: jest.Mocked = { shutdown: jest.fn(), }; -jest.doMock('@kbn/ebt/client', () => ({ +jest.doMock('@elastic/ebt/client', () => ({ createAnalytics: () => analyticsClientMock, })); diff --git a/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.ts b/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.ts index 091643741331e..9a176240b624c 100644 --- a/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.ts +++ b/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.ts @@ -7,8 +7,8 @@ */ import { of, Subscription } from 'rxjs'; -import type { AnalyticsClient } from '@kbn/ebt/client'; -import { createAnalytics } from '@kbn/ebt/client'; +import type { AnalyticsClient } from '@elastic/ebt/client'; +import { createAnalytics } from '@elastic/ebt/client'; import { registerPerformanceMetricEventType } from '@kbn/ebt-tools'; import type { CoreContext } from '@kbn/core-base-browser-internal'; import type { InternalInjectedMetadataSetup } from '@kbn/core-injected-metadata-browser-internal'; @@ -32,9 +32,6 @@ export class AnalyticsService { this.analyticsClient = createAnalytics({ isDev: core.env.mode.dev, logger: core.logger.get('analytics'), - // TODO: We need to be able to edit sendTo once we resolve the telemetry config. - // For now, we are relying on whether it's a distributable or running from source. - sendTo: core.env.packageInfo.dist ? 'production' : 'staging', }); this.registerBuildInfoAnalyticsContext(core); diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_clicks.ts b/packages/core/analytics/core-analytics-browser-internal/src/track_clicks.ts index e545ec0fe7b2a..8a60a7c137d8b 100644 --- a/packages/core/analytics/core-analytics-browser-internal/src/track_clicks.ts +++ b/packages/core/analytics/core-analytics-browser-internal/src/track_clicks.ts @@ -7,7 +7,7 @@ */ import { fromEvent } from 'rxjs'; -import type { AnalyticsClient } from '@kbn/ebt/client'; +import type { AnalyticsClient } from '@elastic/ebt/client'; /** HTML attributes that should be skipped from reporting because they might contain data we do not wish to collect */ const HTML_ATTRIBUTES_TO_REMOVE = [ diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.ts b/packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.ts index 40d479b448b46..c1665e53f7bb6 100644 --- a/packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.ts +++ b/packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.ts @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import type { AnalyticsClient } from '@kbn/ebt/client'; +import type { AnalyticsClient } from '@elastic/ebt/client'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; export function trackPerformanceMeasureEntries(analytics: AnalyticsClient, isDevMode: boolean) { diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.ts b/packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.ts index dd0ebde28addb..97ec6a4bc1490 100644 --- a/packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.ts +++ b/packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.ts @@ -7,7 +7,7 @@ */ import { debounceTime, fromEvent, map, merge, of, shareReplay } from 'rxjs'; -import type { AnalyticsClient, RootSchema } from '@kbn/ebt/client'; +import type { AnalyticsClient, RootSchema } from '@elastic/ebt/client'; export interface ViewportSize { viewport_width: number; diff --git a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json b/packages/core/analytics/core-analytics-browser-internal/tsconfig.json index ecac1746f44a2..152fbeeaa9edd 100644 --- a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json +++ b/packages/core/analytics/core-analytics-browser-internal/tsconfig.json @@ -11,8 +11,7 @@ "@kbn/core-injected-metadata-browser-internal", "@kbn/core-analytics-browser", "@kbn/core-base-browser-mocks", - "@kbn/core-injected-metadata-browser-mocks", - "@kbn/ebt", + "@kbn/core-injected-metadata-browser-mocks" ], "exclude": ["target/**/*"] } diff --git a/packages/core/analytics/core-analytics-browser/index.ts b/packages/core/analytics/core-analytics-browser/index.ts index f20ccf31da2c4..1907260ef6bad 100644 --- a/packages/core/analytics/core-analytics-browser/index.ts +++ b/packages/core/analytics/core-analytics-browser/index.ts @@ -48,4 +48,4 @@ export type { AllowedSchemaTypes, // Shippers IShipper, -} from '@kbn/ebt/client'; +} from '@elastic/ebt/client'; diff --git a/packages/core/analytics/core-analytics-browser/src/types.ts b/packages/core/analytics/core-analytics-browser/src/types.ts index 779172acc9b9d..a41260565a8c1 100644 --- a/packages/core/analytics/core-analytics-browser/src/types.ts +++ b/packages/core/analytics/core-analytics-browser/src/types.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { AnalyticsClient } from '@kbn/ebt/client'; +import type { AnalyticsClient } from '@elastic/ebt/client'; /** * Exposes the public APIs of the AnalyticsClient during the setup phase. diff --git a/packages/core/analytics/core-analytics-browser/tsconfig.json b/packages/core/analytics/core-analytics-browser/tsconfig.json index 83571abe4bcf4..99505f519996c 100644 --- a/packages/core/analytics/core-analytics-browser/tsconfig.json +++ b/packages/core/analytics/core-analytics-browser/tsconfig.json @@ -10,9 +10,7 @@ "include": [ "**/*.ts" ], - "kbn_references": [ - "@kbn/ebt", - ], + "kbn_references": [], "exclude": [ "target/**/*", ] diff --git a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts b/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts index d759a9520cc16..799665f8d927d 100644 --- a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts +++ b/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { AnalyticsClient } from '@kbn/ebt/client'; +import { AnalyticsClient } from '@elastic/ebt/client'; import { Subject } from 'rxjs'; export const analyticsClientMock: jest.Mocked = { @@ -21,6 +21,6 @@ export const analyticsClientMock: jest.Mocked = { flush: jest.fn(), }; -jest.doMock('@kbn/ebt/client', () => ({ +jest.doMock('@elastic/ebt/client', () => ({ createAnalytics: () => analyticsClientMock, })); diff --git a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.ts b/packages/core/analytics/core-analytics-server-internal/src/analytics_service.ts index 8e0ce76e08b96..2098f2f6e9362 100644 --- a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.ts +++ b/packages/core/analytics/core-analytics-server-internal/src/analytics_service.ts @@ -7,8 +7,8 @@ */ import { of } from 'rxjs'; -import type { AnalyticsClient } from '@kbn/ebt/client'; -import { createAnalytics } from '@kbn/ebt/client'; +import type { AnalyticsClient } from '@elastic/ebt/client'; +import { createAnalytics } from '@elastic/ebt/client'; import { registerPerformanceMetricEventType } from '@kbn/ebt-tools'; import type { CoreContext } from '@kbn/core-base-server-internal'; import type { @@ -24,9 +24,6 @@ export class AnalyticsService { this.analyticsClient = createAnalytics({ isDev: core.env.mode.dev, logger: core.logger.get('analytics'), - // TODO: We need to be able to edit sendTo once we resolve the telemetry config. - // For now, we are relying on whether it's a distributable or running from source. - sendTo: core.env.packageInfo.dist ? 'production' : 'staging', }); this.registerBuildInfoAnalyticsContext(core); diff --git a/packages/core/analytics/core-analytics-server-internal/tsconfig.json b/packages/core/analytics/core-analytics-server-internal/tsconfig.json index 57a0fa3e04362..a9d2e7cf47b9d 100644 --- a/packages/core/analytics/core-analytics-server-internal/tsconfig.json +++ b/packages/core/analytics/core-analytics-server-internal/tsconfig.json @@ -15,8 +15,7 @@ "@kbn/core-base-server-internal", "@kbn/core-analytics-server", "@kbn/config-mocks", - "@kbn/core-base-server-mocks", - "@kbn/ebt", + "@kbn/core-base-server-mocks" ], "exclude": [ "target/**/*", diff --git a/packages/core/analytics/core-analytics-server/index.ts b/packages/core/analytics/core-analytics-server/index.ts index 90341deb693a3..952fdb29c1f43 100644 --- a/packages/core/analytics/core-analytics-server/index.ts +++ b/packages/core/analytics/core-analytics-server/index.ts @@ -48,4 +48,4 @@ export type { AllowedSchemaTypes, // Shippers IShipper, -} from '@kbn/ebt/client'; +} from '@elastic/ebt/client'; diff --git a/packages/core/analytics/core-analytics-server/src/contracts.ts b/packages/core/analytics/core-analytics-server/src/contracts.ts index 531c4ef6afd1f..5df79dae09287 100644 --- a/packages/core/analytics/core-analytics-server/src/contracts.ts +++ b/packages/core/analytics/core-analytics-server/src/contracts.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { AnalyticsClient } from '@kbn/ebt/client'; +import type { AnalyticsClient } from '@elastic/ebt/client'; /** * Exposes the public APIs of the AnalyticsClient during the preboot phase diff --git a/packages/core/analytics/core-analytics-server/tsconfig.json b/packages/core/analytics/core-analytics-server/tsconfig.json index aa81d68980cd9..99505f519996c 100644 --- a/packages/core/analytics/core-analytics-server/tsconfig.json +++ b/packages/core/analytics/core-analytics-server/tsconfig.json @@ -10,9 +10,7 @@ "include": [ "**/*.ts" ], - "kbn_references": [ - "@kbn/ebt" - ], + "kbn_references": [], "exclude": [ "target/**/*", ] diff --git a/packages/core/base/core-base-common/src/plugins.ts b/packages/core/base/core-base-common/src/plugins.ts index 3fbd7bcefbffd..d51ba4a88b0dd 100644 --- a/packages/core/base/core-base-common/src/plugins.ts +++ b/packages/core/base/core-base-common/src/plugins.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { ConfigPath } from '@kbn/config'; +import type { ConfigPath } from '@kbn/config'; /** * Dedicated type for plugin name/id that is supposed to make Map/Set/Arrays diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts index 3bf7ab94af0de..2e19999bd8735 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts @@ -46,8 +46,8 @@ const { pollEsNodesVersion: pollEsNodesVersionActual } = jest.requireActual( const isValidConnectionMock = isValidConnection as jest.Mock; -const delay = async (durationMs: number) => - await new Promise((resolve) => setTimeout(resolve, durationMs)); +const TICK = 10; +const tick = (ticks = 1) => jest.advanceTimersByTime(TICK * ticks); const configService = configServiceMock.create(); @@ -67,11 +67,13 @@ beforeEach(() => { env = Env.createDefault(REPO_ROOT, getEnvOptions()); + jest.useFakeTimers(); + mockConfig$ = new BehaviorSubject({ hosts: ['http://1.2.3.4'], healthCheck: { - delay: duration(10), - startupDelay: duration(10), + delay: duration(TICK), + startupDelay: duration(TICK), }, ssl: { verificationMode: 'none', @@ -96,6 +98,7 @@ beforeEach(() => { afterEach(async () => { jest.clearAllMocks(); + jest.useRealTimers(); MockClusterClient.mockClear(); isScriptingEnabledMock.mockReset(); getClusterInfoMock.mockReset(); @@ -223,13 +226,18 @@ describe('#setup', () => { elasticsearchClientMock.createErrorTransportRequestPromise(new Error()) ); + expect(mockedClient.nodes.info).toHaveBeenCalledTimes(0); + const setupContract = await elasticsearchService.setup(setupDeps); - await delay(10); - expect(mockedClient.nodes.info).toHaveBeenCalledTimes(0); + expect(mockedClient.nodes.info).toHaveBeenCalledTimes(1); + + tick(); + + expect(mockedClient.nodes.info).toHaveBeenCalledTimes(2); await firstValueFrom(setupContract.esNodesCompatibility$); - expect(mockedClient.nodes.info).toHaveBeenCalledTimes(1); + expect(mockedClient.nodes.info).toHaveBeenCalledTimes(2); // shares the last value }); it('esNodeVersionCompatibility$ stops polling when unsubscribed from', async () => { @@ -238,13 +246,17 @@ describe('#setup', () => { elasticsearchClientMock.createErrorTransportRequestPromise(new Error()) ); + expect(mockedClient.nodes.info).toHaveBeenCalledTimes(0); + const setupContract = await elasticsearchService.setup(setupDeps); - expect(mockedClient.nodes.info).toHaveBeenCalledTimes(0); + expect(mockedClient.nodes.info).toHaveBeenCalledTimes(1); await firstValueFrom(setupContract.esNodesCompatibility$); - await delay(100); - expect(mockedClient.nodes.info).toHaveBeenCalledTimes(1); + + tick(); + + expect(mockedClient.nodes.info).toHaveBeenCalledTimes(2); }); }); @@ -276,6 +288,7 @@ describe('#start', () => { pollEsNodesVersionMocked.mockImplementation(() => observable$); await elasticsearchService.setup(setupDeps); + tick(); await elasticsearchService.start(); expect(loggingSystemMock.collect(coreContext.logger).error).toEqual([]); observable$.next({ @@ -290,7 +303,7 @@ describe('#start', () => { it('logs an info message about connecting to ES', async () => { isValidConnectionMock.mockImplementation(async () => { - await new Promise((r) => setTimeout(r, 50)); + tick(); }); await elasticsearchService.setup(setupDeps); @@ -309,7 +322,7 @@ describe('#start', () => { it('returns the information about the time spent waiting for Elasticsearch', async () => { isValidConnectionMock.mockImplementation(async () => { - await new Promise((r) => setTimeout(r, 50)); + tick(); }); await elasticsearchService.setup(setupDeps); @@ -487,11 +500,11 @@ describe('#stop', () => { setupContract.esNodesCompatibility$.pipe( concatMap(async () => { expect(mockedClient.nodes.info).toHaveBeenCalledTimes(1); - await delay(10); + tick(); expect(mockedClient.nodes.info).toHaveBeenCalledTimes(2); await elasticsearchService.stop(); - await delay(100); + tick(10); expect(mockedClient.nodes.info).toHaveBeenCalledTimes(2); }) ) diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts index 100fad846374c..87ac7b83d6fb0 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts @@ -6,8 +6,7 @@ * Side Public License, v 1. */ -import { firstValueFrom, Observable, Subject } from 'rxjs'; -import { map, takeUntil } from 'rxjs'; +import { map, takeUntil, firstValueFrom, Observable, Subject } from 'rxjs'; import type { Logger } from '@kbn/logging'; import type { CoreContext, CoreService } from '@kbn/core-base-server-internal'; @@ -107,6 +106,13 @@ export class ElasticsearchService internalClient: this.client.asInternalUser, }).pipe(takeUntil(this.stop$)); + // Log every error we may encounter in the connection to Elasticsearch + esNodesCompatibility$.subscribe(({ isCompatible, message }) => { + if (!isCompatible && message) { + this.log.error(message); + } + }); + this.esNodesCompatibility$ = esNodesCompatibility$; this.clusterInfo$ = getClusterInfo$(this.client.asInternalUser); @@ -138,13 +144,6 @@ export class ElasticsearchService const config = await firstValueFrom(this.config$); - // Log every error we may encounter in the connection to Elasticsearch - this.esNodesCompatibility$.subscribe(({ isCompatible, message }) => { - if (!isCompatible && message) { - this.log.error(message); - } - }); - let capabilities: ElasticsearchCapabilities; let elasticsearchWaitTime: number; diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts index 753a9bd079a4e..7fdeb434a9fcc 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts @@ -11,8 +11,12 @@ * that defined in Kibana's package.json. */ -import { interval, of, from, Observable, BehaviorSubject } from 'rxjs'; import { + interval, + of, + from, + Observable, + BehaviorSubject, map, distinctUntilChanged, catchError, diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/telemetry/event_types.ts b/packages/core/notifications/core-notifications-browser-internal/src/toasts/telemetry/event_types.ts index 35e012fe2f625..d7230668ff491 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/telemetry/event_types.ts +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/telemetry/event_types.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { type RootSchema, type EventTypeOpts } from '@kbn/ebt/client'; +import { type RootSchema, type EventTypeOpts } from '@elastic/ebt/client'; export enum EventMetric { TOAST_DISMISSED = 'global_toast_list_toast_dismissed', diff --git a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json index 88855bd5bd4bb..c3582c1b8925b 100644 --- a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json +++ b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json @@ -30,8 +30,7 @@ "@kbn/core-mount-utils-browser", "@kbn/react-kibana-context-render", "@kbn/core-analytics-browser", - "@kbn/core-analytics-browser-mocks", - "@kbn/ebt", + "@kbn/core-analytics-browser-mocks" ], "exclude": [ "target/**/*", diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_create.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_create.ts index 35c8fc305d062..d61394acf9215 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_create.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_create.ts @@ -37,6 +37,7 @@ export const registerBulkCreateRoute = ( summary: `Create saved objects`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { query: schema.object({ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_delete.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_delete.ts index 0f7219386a07b..2a0867ed82382 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_delete.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_delete.ts @@ -37,6 +37,7 @@ export const registerBulkDeleteRoute = ( summary: `Delete saved objects`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { body: schema.arrayOf( diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_get.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_get.ts index c54069c0aae5c..90be20c4aeaa5 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_get.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_get.ts @@ -37,6 +37,7 @@ export const registerBulkGetRoute = ( summary: `Get saved objects`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { body: schema.arrayOf( diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_resolve.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_resolve.ts index d59c5e096aa2e..fc446393e6c19 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_resolve.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_resolve.ts @@ -37,6 +37,9 @@ export const registerBulkResolveRoute = ( summary: `Resolve saved objects`, tags: ['oas-tag:saved objects'], access, + deprecated: true, + description: `Retrieve multiple Kibana saved objects by ID, using any legacy URL aliases if they exist. + Under certain circumstances, when Kibana is upgraded, saved object migrations may necessitate regenerating some object IDs to enable new features. When an object's ID is regenerated, a legacy URL alias is created for that object, preserving its old ID. In such a scenario, that object can be retrieved with the bulk resolve API using either its new ID or its old ID.`, }, validate: { body: schema.arrayOf( diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_update.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_update.ts index cd401ba4f2061..9d2dbf2297cc9 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_update.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/bulk_update.ts @@ -37,6 +37,7 @@ export const registerBulkUpdateRoute = ( summary: `Update saved objects`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { body: schema.arrayOf( diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/create.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/create.ts index 5fb3a2964c701..b9be159af9491 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/create.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/create.ts @@ -37,6 +37,7 @@ export const registerCreateRoute = ( summary: `Create a saved object`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { params: schema.object({ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/delete.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/delete.ts index eb01f092ba585..841cccf379dc0 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/delete.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/delete.ts @@ -37,6 +37,7 @@ export const registerDeleteRoute = ( summary: `Delete a saved object`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { params: schema.object({ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/export.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/export.ts index ea2adb976d07f..79c4cdc2cd9bc 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/export.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/export.ts @@ -147,6 +147,8 @@ export const registerExportRoute = ( summary: `Export saved objects`, tags: ['oas-tag:saved objects'], access: 'public', + description: + 'Retrieve sets of saved objects that you want to import into Kibana. You must include `type` or `objects` in the request body. \nExported saved objects are not backwards compatible and cannot be imported into an older version of Kibana. \nNOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported.', }, validate: { body: schema.object({ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/find.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/find.ts index 525e80e7637b6..3d305b96f5f5a 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/find.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/find.ts @@ -41,6 +41,7 @@ export const registerFindRoute = ( summary: `Search for saved objects`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { query: schema.object({ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/get.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/get.ts index 5d0ffb9a11964..7c63519dc3752 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/get.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/get.ts @@ -37,6 +37,7 @@ export const registerGetRoute = ( summary: `Get a saved object`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { params: schema.object({ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/import.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/import.ts index 69042c7ce6a31..11f2223d936ca 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/import.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/import.ts @@ -39,6 +39,8 @@ export const registerImportRoute = ( summary: `Import saved objects`, tags: ['oas-tag:saved objects'], access: 'public', + description: + 'Create sets of Kibana saved objects from a file created by the export API. Saved objects can only be imported into the same version, a newer minor on the same major, or the next major. Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana.', body: { maxBytes: maxImportPayloadBytes, output: 'stream', diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve.ts index 2139deda867dc..0994a4cb88c3e 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve.ts @@ -33,6 +33,9 @@ export const registerResolveRoute = ( summary: `Resolve a saved object`, tags: ['oas-tag:saved objects'], access, + deprecated: true, + description: `Retrieve a single Kibana saved object by ID, using any legacy URL alias if it exists. + Under certain circumstances, when Kibana is upgraded, saved object migrations may necessitate regenerating some object IDs to enable new features. When an object's ID is regenerated, a legacy URL alias is created for that object, preserving its old ID. In such a scenario, that object can be retrieved with the resolve API using either its new ID or its old ID.`, }, validate: { params: schema.object({ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve_import_errors.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve_import_errors.ts index e9020b200b048..b77ead750be71 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve_import_errors.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/resolve_import_errors.ts @@ -40,6 +40,8 @@ export const registerResolveImportErrorsRoute = ( summary: `Resolve import errors`, tags: ['oas-tag:saved objects'], access: 'public', + description: + 'To resolve errors from the import objects API, you can retry certain saved objects, overwrite specific saved objects, and change references to different saved objects', body: { maxBytes: maxImportPayloadBytes, output: 'stream', diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/update.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/update.ts index c0b5b9ae26d3b..b2dceac69bbc4 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/update.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/update.ts @@ -38,6 +38,7 @@ export const registerUpdateRoute = ( summary: `Update a saved object`, tags: ['oas-tag:saved objects'], access, + deprecated: true, }, validate: { params: schema.object({ diff --git a/packages/core/saved-objects/docs/openapi/README.md b/packages/core/saved-objects/docs/openapi/README.md index a64b4289935f8..ec5070ff9b09e 100644 --- a/packages/core/saved-objects/docs/openapi/README.md +++ b/packages/core/saved-objects/docs/openapi/README.md @@ -14,14 +14,8 @@ A guide about the openApi specification can be found at [https://swagger.io/docs To validate and bundle the docs, you can use [Redocly](https://redocly.com/docs/cli/) and [Swagger/OpenAPI CLI](https://www.npmjs.com/package/swagger-cli). -For example, run the following commands from the `packages/core/saved-objects/docs/openapi/` folder: -```bash -npx swagger-cli validate entrypoint.yaml -npx swagger-cli validate entrypoint-serverless.yaml -``` - -Then you can generate the `bundled` files by running the following commands: +Generate the `bundled` files by running the following commands: ```bash npx @redocly/cli bundle entrypoint.yaml --output bundled.yaml --ext yaml @@ -30,9 +24,4 @@ npx @redocly/cli bundle entrypoint_serverless.yaml --output bundled_serverless.y npx @redocly/cli bundle entrypoint_serverless.yaml --output bundled_serverless.json --ext json ``` -After generating the json bundle ensure that it is also valid by running the following command: - -```bash -npx @redocly/cli lint bundled.json -npx @redocly/cli lint bundled_serverless.json -``` +Then join these files with the rest of the Kibana APIs per `oas_docs/README.md` diff --git a/packages/core/saved-objects/docs/openapi/bundled.json b/packages/core/saved-objects/docs/openapi/bundled.json index 32e429e0d9c51..06010e44e1a19 100644 --- a/packages/core/saved-objects/docs/openapi/bundled.json +++ b/packages/core/saved-objects/docs/openapi/bundled.json @@ -17,14 +17,6 @@ "url": "/" } ], - "security": [ - { - "basicAuth": [] - }, - { - "apiKeyAuth": [] - } - ], "tags": [ { "name": "saved objects", @@ -385,9 +377,9 @@ }, "/api/saved_objects/_export": { "post": { - "summary": "Export saved objects in the default space", + "summary": "Export saved objects", "operationId": "exportSavedObjectsDefault", - "description": "Retrieve sets of saved objects that you want to import into Kibana.\nYou must include `type` or `objects` in the request body.\n\nNOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "description": "Retrieve sets of saved objects that you want to import into Kibana.\nYou must include `type` or `objects` in the request body.\n\nExported saved objects are not backwards compatible and cannot be imported into an older version of Kibana.\n\nNOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", "tags": [ "saved objects" ], @@ -644,7 +636,7 @@ }, "/api/saved_objects/_import": { "post": { - "summary": "Import saved objects in the default space", + "summary": "Import saved objects", "operationId": "importSavedObjectsDefault", "description": "Create sets of Kibana saved objects from a file created by the export API.\nSaved objects can be imported only into the same version, a newer minor on the same major, or the next major. Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", "tags": [ @@ -1208,18 +1200,6 @@ } }, "components": { - "securitySchemes": { - "basicAuth": { - "type": "http", - "scheme": "basic" - }, - "apiKeyAuth": { - "type": "apiKey", - "in": "header", - "name": "Authorization", - "description": "e.g. Authorization: ApiKey base64AccessApiKey" - } - }, "examples": { "key_rotation_response": { "summary": "Encryption key rotation using default parameters.", diff --git a/packages/core/saved-objects/docs/openapi/bundled.yaml b/packages/core/saved-objects/docs/openapi/bundled.yaml index 53874b9a469cf..d616131ac494e 100644 --- a/packages/core/saved-objects/docs/openapi/bundled.yaml +++ b/packages/core/saved-objects/docs/openapi/bundled.yaml @@ -10,9 +10,6 @@ info: url: https://www.elastic.co/licensing/elastic-license servers: - url: / -security: - - basicAuth: [] - - apiKeyAuth: [] tags: - name: saved objects description: Manage Kibana saved objects, including dashboards, visualizations, and more. @@ -253,12 +250,14 @@ paths: $ref: '#/components/schemas/400_response' /api/saved_objects/_export: post: - summary: Export saved objects in the default space + summary: Export saved objects operationId: exportSavedObjectsDefault description: | Retrieve sets of saved objects that you want to import into Kibana. You must include `type` or `objects` in the request body. + Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana. + NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported. This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. @@ -416,7 +415,7 @@ paths: $ref: '#/components/schemas/400_response' /api/saved_objects/_import: post: - summary: Import saved objects in the default space + summary: Import saved objects operationId: importSavedObjectsDefault description: | Create sets of Kibana saved objects from a file created by the export API. @@ -798,15 +797,6 @@ paths: schema: $ref: '#/components/schemas/400_response' components: - securitySchemes: - basicAuth: - type: http - scheme: basic - apiKeyAuth: - type: apiKey - in: header - name: Authorization - description: 'e.g. Authorization: ApiKey base64AccessApiKey' examples: key_rotation_response: summary: Encryption key rotation using default parameters. diff --git a/packages/core/saved-objects/docs/openapi/bundled_serverless.json b/packages/core/saved-objects/docs/openapi/bundled_serverless.json index 9fdd5303eaf46..6bc767088bbec 100644 --- a/packages/core/saved-objects/docs/openapi/bundled_serverless.json +++ b/packages/core/saved-objects/docs/openapi/bundled_serverless.json @@ -22,11 +22,6 @@ } } ], - "security": [ - { - "apiKeyAuth": [] - } - ], "tags": [ { "name": "saved objects", @@ -36,9 +31,9 @@ "paths": { "/api/saved_objects/_export": { "post": { - "summary": "Export saved objects in the default space", + "summary": "Export saved objects", "operationId": "exportSavedObjectsDefault", - "description": "Retrieve sets of saved objects that you want to import into Kibana.\nYou must include `type` or `objects` in the request body.\n\nNOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "description": "Retrieve sets of saved objects that you want to import into Kibana.\nYou must include `type` or `objects` in the request body.\n\nExported saved objects are not backwards compatible and cannot be imported into an older version of Kibana.\n\nNOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", "tags": [ "saved objects" ], @@ -126,7 +121,7 @@ }, "/api/saved_objects/_import": { "post": { - "summary": "Import saved objects in the default space", + "summary": "Import saved objects", "operationId": "importSavedObjectsDefault", "description": "Create sets of Kibana saved objects from a file created by the export API.\nSaved objects can be imported only into the same version, a newer minor on the same major, or the next major. Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", "tags": [ @@ -236,147 +231,9 @@ } } } - }, - "/s/{spaceId}/api/saved_objects/_export": { - "post": { - "summary": "Export saved objects", - "operationId": "exportSavedObjects", - "description": "Retrieves sets of saved objects that you want to import into Kibana.\nYou must include `type` or `objects` in the request body.\n\nNOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", - "tags": [ - "saved objects" - ], - "parameters": [ - { - "$ref": "#/components/parameters/kbn_xsrf" - }, - { - "$ref": "#/components/parameters/space_id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/export_objects_request" - }, - "examples": { - "exportSavedObjectsRequest": { - "$ref": "#/components/examples/export_objects_request" - } - } - } - } - }, - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/x-ndjson": { - "schema": { - "type": "object", - "additionalProperties": true - }, - "examples": { - "exportSavedObjectsResponse": { - "$ref": "#/components/examples/export_objects_response" - } - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/400_response" - } - } - } - } - } - } - }, - "/s/{spaceId}/api/saved_objects/_import": { - "post": { - "summary": "Import saved objects", - "operationId": "importSavedObjects", - "description": "Creates sets of Kibana saved objects from a file created by the export API.\nSaved objects can be imported only into the same version, a newer minor on the same major, or the next major. Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana.\n\nThis functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", - "tags": [ - "saved objects" - ], - "parameters": [ - { - "$ref": "#/components/parameters/kbn_xsrf" - }, - { - "$ref": "#/components/parameters/space_id" - }, - { - "$ref": "#/components/parameters/compatibility_mode" - }, - { - "$ref": "#/components/parameters/create_new_copies" - }, - { - "$ref": "#/components/parameters/overwrite" - } - ], - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/import_objects_request" - }, - "examples": { - "importObjectsRequest": { - "$ref": "#/components/examples/import_objects_request" - } - } - } - } - }, - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/200_import_objects_response" - }, - "examples": { - "importObjectsResponse": { - "$ref": "#/components/examples/import_objects_response" - } - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/400_response" - } - } - } - } - } - } } }, "components": { - "securitySchemes": { - "apiKeyAuth": { - "type": "apiKey", - "in": "header", - "name": "Authorization", - "description": "Serverless APIs support only key-based authentication. You must create an API key and use the encoded value in the request header. For example: 'Authorization: ApiKey base64AccessApiKey'.\n" - } - }, "parameters": { "kbn_xsrf": { "schema": { @@ -386,43 +243,6 @@ "name": "kbn-xsrf", "description": "Cross-site request forgery protection", "required": true - }, - "space_id": { - "in": "path", - "name": "spaceId", - "description": "An identifier for the space. If `/s/` and the identifier are omitted from the path, the default space is used.", - "required": true, - "schema": { - "type": "string", - "example": "default" - } - }, - "compatibility_mode": { - "in": "query", - "name": "compatibilityMode", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "Applies various adjustments to the saved objects that are being imported to maintain compatibility between different Kibana versions. Use this option only if you encounter issues with imported saved objects. NOTE: This option cannot be used with the `createNewCopies` option.\n" - }, - "create_new_copies": { - "in": "query", - "name": "createNewCopies", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "Creates copies of saved objects, regenerates each object ID, and resets the origin. When used, potential conflict errors are avoided. NOTE: This option cannot be used with the `overwrite` and `compatibilityMode` options.\n" - }, - "overwrite": { - "in": "query", - "name": "overwrite", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "Overwrites saved objects when they already exist. When used, potential conflict errors are automatically resolved by overwriting the destination object. NOTE: This option cannot be used with the `createNewCopies` option.\n" } }, "examples": { @@ -527,76 +347,6 @@ ] } } - }, - "export_objects_request": { - "type": "object", - "properties": { - "excludeExportDetails": { - "description": "Do not add export details entry at the end of the stream.", - "type": "boolean", - "default": false - }, - "includeReferencesDeep": { - "description": "Includes all of the referenced objects in the exported objects.", - "type": "boolean" - }, - "objects": { - "description": "A list of objects to export.", - "type": "array", - "items": { - "type": "object" - } - }, - "type": { - "description": "The saved object types to include in the export. Use `*` to export all the types.", - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - } - } - }, - "import_objects_request": { - "type": "object", - "properties": { - "file": { - "description": "A file exported using the export API. NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be included in this file. Similarly, the `savedObjects.maxImportPayloadBytes` setting limits the overall size of the file that can be imported.\n" - } - } - }, - "200_import_objects_response": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "description": "Indicates when the import was successfully completed. When set to false, some objects may not have been created. For additional information, refer to the `errors` and `successResults` properties.\n" - }, - "successCount": { - "type": "integer", - "description": "Indicates the number of successfully imported records." - }, - "errors": { - "type": "array", - "items": { - "type": "object" - }, - "description": "Indicates the import was unsuccessful and specifies the objects that failed to import.\n\nNOTE: One object may result in multiple errors, which requires separate steps to resolve. For instance, a `missing_references` error and conflict error.\n" - }, - "successResults": { - "type": "array", - "items": { - "type": "object" - }, - "description": "Indicates the objects that are successfully imported, with any metadata if applicable.\n\nNOTE: Objects are created only when all resolvable errors are addressed, including conflicts and missing references. If objects are created as new copies, each entry in the `successResults` array includes a `destinationId` attribute.\n" - } - } } } } diff --git a/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml b/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml index cf07e2b72669c..a8dc8b30fffe2 100644 --- a/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml +++ b/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml @@ -13,20 +13,20 @@ servers: variables: kibana_url: default: localhost:5601 -security: - - apiKeyAuth: [] tags: - name: saved objects description: Manage Kibana saved objects, including dashboards, visualizations, and more. paths: /api/saved_objects/_export: post: - summary: Export saved objects in the default space + summary: Export saved objects operationId: exportSavedObjectsDefault description: | Retrieve sets of saved objects that you want to import into Kibana. You must include `type` or `objects` in the request body. + Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana. + NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported. This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. @@ -82,7 +82,7 @@ paths: $ref: '#/components/schemas/400_response' /api/saved_objects/_import: post: - summary: Import saved objects in the default space + summary: Import saved objects operationId: importSavedObjectsDefault description: | Create sets of Kibana saved objects from a file created by the export API. @@ -167,98 +167,7 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' - /s/{spaceId}/api/saved_objects/_export: - post: - summary: Export saved objects - operationId: exportSavedObjects - description: | - Retrieves sets of saved objects that you want to import into Kibana. - You must include `type` or `objects` in the request body. - - NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported. - - This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. - tags: - - saved objects - parameters: - - $ref: '#/components/parameters/kbn_xsrf' - - $ref: '#/components/parameters/space_id' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/export_objects_request' - examples: - exportSavedObjectsRequest: - $ref: '#/components/examples/export_objects_request' - responses: - '200': - description: Indicates a successful call. - content: - application/x-ndjson: - schema: - type: object - additionalProperties: true - examples: - exportSavedObjectsResponse: - $ref: '#/components/examples/export_objects_response' - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/400_response' - /s/{spaceId}/api/saved_objects/_import: - post: - summary: Import saved objects - operationId: importSavedObjects - description: | - Creates sets of Kibana saved objects from a file created by the export API. - Saved objects can be imported only into the same version, a newer minor on the same major, or the next major. Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana. - - This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. - tags: - - saved objects - parameters: - - $ref: '#/components/parameters/kbn_xsrf' - - $ref: '#/components/parameters/space_id' - - $ref: '#/components/parameters/compatibility_mode' - - $ref: '#/components/parameters/create_new_copies' - - $ref: '#/components/parameters/overwrite' - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/import_objects_request' - examples: - importObjectsRequest: - $ref: '#/components/examples/import_objects_request' - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - $ref: '#/components/schemas/200_import_objects_response' - examples: - importObjectsResponse: - $ref: '#/components/examples/import_objects_response' - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/400_response' components: - securitySchemes: - apiKeyAuth: - type: apiKey - in: header - name: Authorization - description: | - Serverless APIs support only key-based authentication. You must create an API key and use the encoded value in the request header. For example: 'Authorization: ApiKey base64AccessApiKey'. parameters: kbn_xsrf: schema: @@ -267,38 +176,6 @@ components: name: kbn-xsrf description: Cross-site request forgery protection required: true - space_id: - in: path - name: spaceId - description: An identifier for the space. If `/s/` and the identifier are omitted from the path, the default space is used. - required: true - schema: - type: string - example: default - compatibility_mode: - in: query - name: compatibilityMode - schema: - type: boolean - required: false - description: | - Applies various adjustments to the saved objects that are being imported to maintain compatibility between different Kibana versions. Use this option only if you encounter issues with imported saved objects. NOTE: This option cannot be used with the `createNewCopies` option. - create_new_copies: - in: query - name: createNewCopies - schema: - type: boolean - required: false - description: | - Creates copies of saved objects, regenerates each object ID, and resets the origin. When used, potential conflict errors are avoided. NOTE: This option cannot be used with the `overwrite` and `compatibilityMode` options. - overwrite: - in: query - name: overwrite - schema: - type: boolean - required: false - description: | - Overwrites saved objects when they already exist. When used, potential conflict errors are automatically resolved by overwriting the destination object. NOTE: This option cannot be used with the `createNewCopies` option. examples: export_objects_request: summary: Export a specific saved object. @@ -370,57 +247,3 @@ components: type: integer enum: - 400 - export_objects_request: - type: object - properties: - excludeExportDetails: - description: Do not add export details entry at the end of the stream. - type: boolean - default: false - includeReferencesDeep: - description: Includes all of the referenced objects in the exported objects. - type: boolean - objects: - description: A list of objects to export. - type: array - items: - type: object - type: - description: The saved object types to include in the export. Use `*` to export all the types. - oneOf: - - type: string - - type: array - items: - type: string - import_objects_request: - type: object - properties: - file: - description: | - A file exported using the export API. NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be included in this file. Similarly, the `savedObjects.maxImportPayloadBytes` setting limits the overall size of the file that can be imported. - 200_import_objects_response: - type: object - properties: - success: - type: boolean - description: | - Indicates when the import was successfully completed. When set to false, some objects may not have been created. For additional information, refer to the `errors` and `successResults` properties. - successCount: - type: integer - description: Indicates the number of successfully imported records. - errors: - type: array - items: - type: object - description: | - Indicates the import was unsuccessful and specifies the objects that failed to import. - - NOTE: One object may result in multiple errors, which requires separate steps to resolve. For instance, a `missing_references` error and conflict error. - successResults: - type: array - items: - type: object - description: | - Indicates the objects that are successfully imported, with any metadata if applicable. - - NOTE: Objects are created only when all resolvable errors are addressed, including conflicts and missing references. If objects are created as new copies, each entry in the `successResults` array includes a `destinationId` attribute. diff --git a/packages/core/saved-objects/docs/openapi/entrypoint.yaml b/packages/core/saved-objects/docs/openapi/entrypoint.yaml index 9fbd1f0ab70cb..ee20a72801647 100644 --- a/packages/core/saved-objects/docs/openapi/entrypoint.yaml +++ b/packages/core/saved-objects/docs/openapi/entrypoint.yaml @@ -41,16 +41,16 @@ paths: $ref: 'paths/api@saved_objects@{type}@{id}.yaml' '/api/saved_objects/resolve/{type}/{id}': $ref: 'paths/api@saved_objects@resolve@{type}@{id}.yaml' -components: - securitySchemes: - basicAuth: - type: http - scheme: basic - apiKeyAuth: - type: apiKey - in: header - name: Authorization - description: 'e.g. Authorization: ApiKey base64AccessApiKey' -security: - - basicAuth: [] - - apiKeyAuth: [] +# components: +# securitySchemes: +# basicAuth: +# type: http +# scheme: basic +# apiKeyAuth: +# type: apiKey +# in: header +# name: Authorization +# description: 'e.g. Authorization: ApiKey base64AccessApiKey' +# security: +# - basicAuth: [] +# - apiKeyAuth: [] diff --git a/packages/core/saved-objects/docs/openapi/entrypoint_serverless.yaml b/packages/core/saved-objects/docs/openapi/entrypoint_serverless.yaml index b9500ccdbc570..ab3dcacf9a39d 100644 --- a/packages/core/saved-objects/docs/openapi/entrypoint_serverless.yaml +++ b/packages/core/saved-objects/docs/openapi/entrypoint_serverless.yaml @@ -21,19 +21,15 @@ paths: $ref: 'paths/api@saved_objects@_export.yaml' '/api/saved_objects/_import': $ref: 'paths/api@saved_objects@_import.yaml' - '/s/{spaceId}/api/saved_objects/_export': - $ref: 'paths/s@{spaceid}@api@saved_objects@_export.yaml' - '/s/{spaceId}/api/saved_objects/_import': - $ref: 'paths/s@{spaceid}@api@saved_objects@_import.yaml' -components: - securitySchemes: - apiKeyAuth: - type: apiKey - in: header - name: Authorization - description: > - Serverless APIs support only key-based authentication. - You must create an API key and use the encoded value in the request header. - For example: 'Authorization: ApiKey base64AccessApiKey'. -security: - - apiKeyAuth: [] +# components: +# securitySchemes: +# apiKeyAuth: +# type: apiKey +# in: header +# name: Authorization +# description: > +# Serverless APIs support only key-based authentication. +# You must create an API key and use the encoded value in the request header. +# For example: 'Authorization: ApiKey base64AccessApiKey'. +# security: +# - apiKeyAuth: [] diff --git a/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_export.yaml b/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_export.yaml index 6b21922a0cabb..93224e4d243b3 100644 --- a/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_export.yaml +++ b/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_export.yaml @@ -1,10 +1,12 @@ post: - summary: Export saved objects in the default space + summary: Export saved objects operationId: exportSavedObjectsDefault description: | Retrieve sets of saved objects that you want to import into Kibana. You must include `type` or `objects` in the request body. + Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana. + NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported. This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. diff --git a/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_import.yaml b/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_import.yaml index 6d61af2f85147..12453a29ce78b 100644 --- a/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_import.yaml +++ b/packages/core/saved-objects/docs/openapi/paths/api@saved_objects@_import.yaml @@ -1,5 +1,5 @@ post: - summary: Import saved objects in the default space + summary: Import saved objects operationId: importSavedObjectsDefault description: | Create sets of Kibana saved objects from a file created by the export API. diff --git a/packages/core/saved-objects/docs/openapi/paths/s@{spaceid}@api@saved_objects@_export.yaml b/packages/core/saved-objects/docs/openapi/paths/s@{spaceid}@api@saved_objects@_export.yaml deleted file mode 100644 index 914c872ec05e8..0000000000000 --- a/packages/core/saved-objects/docs/openapi/paths/s@{spaceid}@api@saved_objects@_export.yaml +++ /dev/null @@ -1,41 +0,0 @@ -post: - summary: Export saved objects - operationId: exportSavedObjects - description: | - Retrieves sets of saved objects that you want to import into Kibana. - You must include `type` or `objects` in the request body. - - NOTE: The `savedObjects.maxImportExportSize` configuration setting limits the number of saved objects which may be exported. - - This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. - tags: - - saved objects - parameters: - - $ref: '../components/headers/kbn_xsrf.yaml' - - $ref: '../components/parameters/space_id.yaml' - requestBody: - required: true - content: - application/json: - schema: - $ref: '../components/schemas/export_objects_request.yaml' - examples: - exportSavedObjectsRequest: - $ref: '../components/examples/export_objects_request.yaml' - responses: - '200': - description: Indicates a successful call. - content: - application/x-ndjson: - schema: - type: object - additionalProperties: true - examples: - exportSavedObjectsResponse: - $ref: '../components/examples/export_objects_response.yaml' - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '../components/schemas/400_response.yaml' diff --git a/packages/core/saved-objects/docs/openapi/paths/s@{spaceid}@api@saved_objects@_import.yaml b/packages/core/saved-objects/docs/openapi/paths/s@{spaceid}@api@saved_objects@_import.yaml deleted file mode 100644 index eac1b3810e0fd..0000000000000 --- a/packages/core/saved-objects/docs/openapi/paths/s@{spaceid}@api@saved_objects@_import.yaml +++ /dev/null @@ -1,41 +0,0 @@ -post: - summary: Import saved objects - operationId: importSavedObjects - description: | - Creates sets of Kibana saved objects from a file created by the export API. - Saved objects can be imported only into the same version, a newer minor on the same major, or the next major. Exported saved objects are not backwards compatible and cannot be imported into an older version of Kibana. - - This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. - tags: - - saved objects - parameters: - - $ref: '../components/headers/kbn_xsrf.yaml' - - $ref: '../components/parameters/space_id.yaml' - - $ref: '../components/parameters/compatibility_mode.yaml' - - $ref: '../components/parameters/create_new_copies.yaml' - - $ref: '../components/parameters/overwrite.yaml' - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: '../components/schemas/import_objects_request.yaml' - examples: - importObjectsRequest: - $ref: '../components/examples/import_objects_request.yaml' - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - $ref: '../components/schemas/200_import_objects_response.yaml' - examples: - importObjectsResponse: - $ref: '../components/examples/import_objects_response.yaml' - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '../components/schemas/400_response.yaml' diff --git a/packages/core/status/core-status-server-internal/src/status_service.ts b/packages/core/status/core-status-server-internal/src/status_service.ts index a24153342543c..39e36069c7b28 100644 --- a/packages/core/status/core-status-server-internal/src/status_service.ts +++ b/packages/core/status/core-status-server-internal/src/status_service.ts @@ -18,7 +18,7 @@ import { import { map, distinctUntilChanged, shareReplay, takeUntil, debounceTime } from 'rxjs'; import { isDeepStrictEqual } from 'util'; -import type { RootSchema } from '@kbn/ebt/client'; +import type { RootSchema } from '@elastic/ebt/client'; import type { Logger, LogMeta } from '@kbn/logging'; import type { CoreContext, CoreService } from '@kbn/core-base-server-internal'; import type { PluginName } from '@kbn/core-base-common'; diff --git a/packages/core/status/core-status-server-internal/tsconfig.json b/packages/core/status/core-status-server-internal/tsconfig.json index 42d4e92c57e0a..bda646809e414 100644 --- a/packages/core/status/core-status-server-internal/tsconfig.json +++ b/packages/core/status/core-status-server-internal/tsconfig.json @@ -41,7 +41,6 @@ "@kbn/core-analytics-server-mocks", "@kbn/core-logging-server-internal", "@kbn/core-logging-server-mocks", - "@kbn/ebt", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-apm-config-loader/kibana.jsonc b/packages/kbn-apm-config-loader/kibana.jsonc index e9d06f3539492..32c994307eb6f 100644 --- a/packages/kbn-apm-config-loader/kibana.jsonc +++ b/packages/kbn-apm-config-loader/kibana.jsonc @@ -1,5 +1,5 @@ { - "type": "shared-common", + "type": "shared-server", "id": "@kbn/apm-config-loader", "owner": ["@elastic/kibana-core", "@vigneshshanmugam"] } diff --git a/packages/analytics/ebt/client/src/shippers/index.ts b/packages/kbn-apm-types/es_fields.ts similarity index 89% rename from packages/analytics/ebt/client/src/shippers/index.ts rename to packages/kbn-apm-types/es_fields.ts index 7a4ab7d85b9f2..00e78c5196f7d 100644 --- a/packages/analytics/ebt/client/src/shippers/index.ts +++ b/packages/kbn-apm-types/es_fields.ts @@ -6,4 +6,4 @@ * Side Public License, v 1. */ -export type { IShipper } from './types'; +export * from './src/es_fields/apm'; diff --git a/packages/kbn-apm-types/es_schemas_raw.ts b/packages/kbn-apm-types/es_schemas_raw.ts new file mode 100644 index 0000000000000..ef0d4cbeb5897 --- /dev/null +++ b/packages/kbn-apm-types/es_schemas_raw.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 './src/es_schemas/raw'; +export * from './src/es_schemas/raw/fields'; diff --git a/packages/analytics/ebt/client/src/mocks.ts b/packages/kbn-apm-types/es_schemas_ui.ts similarity index 75% rename from packages/analytics/ebt/client/src/mocks.ts rename to packages/kbn-apm-types/es_schemas_ui.ts index 84a8f0854773a..e974312a737ef 100644 --- a/packages/analytics/ebt/client/src/mocks.ts +++ b/packages/kbn-apm-types/es_schemas_ui.ts @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -export { shippersMock } from './shippers/mocks'; -export { analyticsClientMock } from './analytics_client/mocks'; +export * from './src/es_schemas/ui'; +export * from './src/es_schemas/ui/fields'; diff --git a/packages/analytics/ebt/client/src/schema/validation/index.ts b/packages/kbn-apm-types/index.ts similarity index 77% rename from packages/analytics/ebt/client/src/schema/validation/index.ts rename to packages/kbn-apm-types/index.ts index 0c16f8f7c4cc7..8f15cbd897e28 100644 --- a/packages/analytics/ebt/client/src/schema/validation/index.ts +++ b/packages/kbn-apm-types/index.ts @@ -6,5 +6,6 @@ * Side Public License, v 1. */ -export { schemaToIoTs } from './schema_to_io_ts'; -export { validateSchema } from './validate_schema'; +export * from './es_fields'; +export * from './es_schemas_raw'; +export * from './es_schemas_ui'; diff --git a/packages/kbn-apm-types/kibana.jsonc b/packages/kbn-apm-types/kibana.jsonc new file mode 100644 index 0000000000000..26b4ec0b1cf75 --- /dev/null +++ b/packages/kbn-apm-types/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/apm-types", + "owner": "@elastic/obs-ux-infra_services-team" +} diff --git a/packages/analytics/ebt/package.json b/packages/kbn-apm-types/package.json similarity index 76% rename from packages/analytics/ebt/package.json rename to packages/kbn-apm-types/package.json index aee987a4c179b..3b15b82701d81 100644 --- a/packages/analytics/ebt/package.json +++ b/packages/kbn-apm-types/package.json @@ -1,5 +1,5 @@ { - "name": "@kbn/ebt", + "name": "@kbn/apm-types", "private": true, "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0" diff --git a/packages/kbn-apm-types/src/es_fields/apm.ts b/packages/kbn-apm-types/src/es_fields/apm.ts new file mode 100644 index 0000000000000..d17a1ed78db90 --- /dev/null +++ b/packages/kbn-apm-types/src/es_fields/apm.ts @@ -0,0 +1,197 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 TIMESTAMP = 'timestamp.us'; +export const AGENT = 'agent'; +export const AGENT_NAME = 'agent.name'; +export const AGENT_VERSION = 'agent.version'; +export const AGENT_ACTIVATION_METHOD = 'agent.activation_method'; + +export const DESTINATION_ADDRESS = 'destination.address'; + +export const CLOUD = 'cloud'; +export const CLOUD_AVAILABILITY_ZONE = 'cloud.availability_zone'; +export const CLOUD_PROVIDER = 'cloud.provider'; +export const CLOUD_REGION = 'cloud.region'; +export const CLOUD_MACHINE_TYPE = 'cloud.machine.type'; +export const CLOUD_ACCOUNT_ID = 'cloud.account.id'; +export const CLOUD_INSTANCE_ID = 'cloud.instance.id'; +export const CLOUD_INSTANCE_NAME = 'cloud.instance.name'; +export const CLOUD_SERVICE_NAME = 'cloud.service.name'; + +export const EVENT_SUCCESS_COUNT = 'event.success_count'; + +export const SERVICE = 'service'; +export const SERVICE_NAME = 'service.name'; +export const SERVICE_ENVIRONMENT = 'service.environment'; +export const SERVICE_FRAMEWORK_NAME = 'service.framework.name'; +export const SERVICE_FRAMEWORK_VERSION = 'service.framework.version'; +export const SERVICE_LANGUAGE_NAME = 'service.language.name'; +export const SERVICE_LANGUAGE_VERSION = 'service.language.version'; +export const SERVICE_RUNTIME_NAME = 'service.runtime.name'; +export const SERVICE_RUNTIME_VERSION = 'service.runtime.version'; +export const SERVICE_NODE_NAME = 'service.node.name'; +export const SERVICE_VERSION = 'service.version'; +export const SERVICE_TARGET_TYPE = 'service.target.type'; +export const SERVICE_OVERFLOW_COUNT = 'service_transaction.aggregation.overflow_count'; + +export const URL_FULL = 'url.full'; +export const HTTP_REQUEST_METHOD = 'http.request.method'; +export const HTTP_RESPONSE_STATUS_CODE = 'http.response.status_code'; +export const USER_ID = 'user.id'; +export const USER_AGENT_ORIGINAL = 'user_agent.original'; +export const USER_AGENT_NAME = 'user_agent.name'; + +export const OBSERVER_HOSTNAME = 'observer.hostname'; +export const OBSERVER_LISTENING = 'observer.listening'; +export const PROCESSOR_EVENT = 'processor.event'; + +export const TRANSACTION_DURATION = 'transaction.duration.us'; +export const TRANSACTION_DURATION_HISTOGRAM = 'transaction.duration.histogram'; +export const TRANSACTION_DURATION_SUMMARY = 'transaction.duration.summary'; +export const TRANSACTION_TYPE = 'transaction.type'; +export const TRANSACTION_RESULT = 'transaction.result'; +export const TRANSACTION_NAME = 'transaction.name'; +export const TRANSACTION_ID = 'transaction.id'; +export const TRANSACTION_SAMPLED = 'transaction.sampled'; +export const TRANSACTION_PAGE_URL = 'transaction.page.url'; +export const TRANSACTION_FAILURE_COUNT = 'transaction.failure_count'; +export const TRANSACTION_SUCCESS_COUNT = 'transaction.success_count'; +export const TRANSACTION_OVERFLOW_COUNT = 'transaction.aggregation.overflow_count'; +// for transaction metrics +export const TRANSACTION_ROOT = 'transaction.root'; +export const TRANSACTION_PROFILER_STACK_TRACE_IDS = 'transaction.profiler_stack_trace_ids'; + +export const EVENT_OUTCOME = 'event.outcome'; + +export const TRACE_ID = 'trace.id'; + +export const SPAN_DURATION = 'span.duration.us'; +export const SPAN_TYPE = 'span.type'; +export const SPAN_SUBTYPE = 'span.subtype'; +export const SPAN_SELF_TIME_SUM = 'span.self_time.sum.us'; +export const SPAN_ACTION = 'span.action'; +export const SPAN_NAME = 'span.name'; +export const SPAN_ID = 'span.id'; +export const SPAN_DESTINATION_SERVICE_RESOURCE = 'span.destination.service.resource'; +export const SPAN_DESTINATION_SERVICE_RESPONSE_TIME_COUNT = + 'span.destination.service.response_time.count'; + +export const SPAN_DESTINATION_SERVICE_RESPONSE_TIME_SUM = + 'span.destination.service.response_time.sum.us'; + +export const SPAN_LINKS = 'span.links'; +export const SPAN_LINKS_TRACE_ID = 'span.links.trace.id'; +export const SPAN_LINKS_SPAN_ID = 'span.links.span.id'; + +export const SPAN_COMPOSITE_COUNT = 'span.composite.count'; +export const SPAN_COMPOSITE_SUM = 'span.composite.sum.us'; +export const SPAN_COMPOSITE_COMPRESSION_STRATEGY = 'span.composite.compression_strategy'; + +export const SPAN_SYNC = 'span.sync'; + +// Parent ID for a transaction or span +export const PARENT_ID = 'parent.id'; + +export const ERROR_ID = 'error.id'; +export const ERROR_GROUP_ID = 'error.grouping_key'; +export const ERROR_GROUP_NAME = 'error.grouping_name'; +export const ERROR_CULPRIT = 'error.culprit'; +export const ERROR_LOG_LEVEL = 'error.log.level'; +export const ERROR_LOG_MESSAGE = 'error.log.message'; +export const ERROR_EXCEPTION = 'error.exception'; +export const ERROR_EXC_MESSAGE = 'error.exception.message'; // only to be used in es queries, since error.exception is now an array +export const ERROR_EXC_HANDLED = 'error.exception.handled'; // only to be used in es queries, since error.exception is now an array +export const ERROR_EXC_TYPE = 'error.exception.type'; +export const ERROR_PAGE_URL = 'error.page.url'; +export const ERROR_TYPE = 'error.type'; + +// METRICS +export const METRIC_SYSTEM_FREE_MEMORY = 'system.memory.actual.free'; +export const METRIC_SYSTEM_TOTAL_MEMORY = 'system.memory.total'; +export const METRIC_SYSTEM_CPU_PERCENT = 'system.cpu.total.norm.pct'; +export const METRIC_PROCESS_CPU_PERCENT = 'system.process.cpu.total.norm.pct'; +export const METRIC_CGROUP_MEMORY_LIMIT_BYTES = 'system.process.cgroup.memory.mem.limit.bytes'; +export const METRIC_CGROUP_MEMORY_USAGE_BYTES = 'system.process.cgroup.memory.mem.usage.bytes'; + +export const METRIC_JAVA_HEAP_MEMORY_MAX = 'jvm.memory.heap.max'; +export const METRIC_JAVA_HEAP_MEMORY_COMMITTED = 'jvm.memory.heap.committed'; +export const METRIC_JAVA_HEAP_MEMORY_USED = 'jvm.memory.heap.used'; +export const METRIC_JAVA_NON_HEAP_MEMORY_MAX = 'jvm.memory.non_heap.max'; +export const METRIC_JAVA_NON_HEAP_MEMORY_COMMITTED = 'jvm.memory.non_heap.committed'; +export const METRIC_JAVA_NON_HEAP_MEMORY_USED = 'jvm.memory.non_heap.used'; +export const METRIC_JAVA_THREAD_COUNT = 'jvm.thread.count'; +export const METRIC_JAVA_GC_COUNT = 'jvm.gc.count'; +export const METRIC_JAVA_GC_TIME = 'jvm.gc.time'; + +export const METRICSET_NAME = 'metricset.name'; +export const METRICSET_INTERVAL = 'metricset.interval'; + +export const LABEL_NAME = 'labels.name'; +export const LABEL_GC = 'labels.gc'; +export const LABEL_TYPE = 'labels.type'; +export const LABEL_TELEMETRY_AUTO_VERSION = 'labels.telemetry_auto_version'; +export const LABEL_LIFECYCLE_STATE = 'labels.lifecycle_state'; + +export const HOST = 'host'; +export const HOST_HOSTNAME = 'host.hostname'; // Do not use. Please use `HOST_NAME` instead. +export const HOST_NAME = 'host.name'; +export const HOST_OS_PLATFORM = 'host.os.platform'; +export const HOST_ARCHITECTURE = 'host.architecture'; +export const HOST_OS_VERSION = 'host.os.version'; + +export const CONTAINER_ID = 'container.id'; +export const CONTAINER = 'container'; +export const CONTAINER_IMAGE = 'container.image.name'; + +export const KUBERNETES = 'kubernetes'; +export const KUBERNETES_POD_NAME = 'kubernetes.pod.name'; +export const KUBERNETES_POD_UID = 'kubernetes.pod.uid'; + +export const FAAS_ID = 'faas.id'; +export const FAAS_NAME = 'faas.name'; +export const FAAS_COLDSTART = 'faas.coldstart'; +export const FAAS_TRIGGER_TYPE = 'faas.trigger.type'; +export const FAAS_DURATION = 'faas.duration'; +export const FAAS_COLDSTART_DURATION = 'faas.coldstart_duration'; +export const FAAS_BILLED_DURATION = 'faas.billed_duration'; + +// OpenTelemetry Metrics +export const METRIC_OTEL_SYSTEM_CPU_UTILIZATION = 'system.cpu.utilization'; +export const METRIC_OTEL_SYSTEM_MEMORY_UTILIZATION = 'system.memory.utilization'; + +export const METRIC_OTEL_JVM_PROCESS_CPU_PERCENT = 'process.runtime.jvm.cpu.utilization'; +export const METRIC_OTEL_JVM_PROCESS_MEMORY_USAGE = 'process.runtime.jvm.memory.usage'; +export const METRIC_OTEL_JVM_PROCESS_MEMORY_COMMITTED = 'process.runtime.jvm.memory.committed'; +export const METRIC_OTEL_JVM_PROCESS_MEMORY_LIMIT = 'process.runtime.jvm.memory.limit'; +export const METRIC_OTEL_JVM_PROCESS_THREADS_COUNT = 'process.runtime.jvm.threads.count'; +export const METRIC_OTEL_JVM_SYSTEM_CPU_PERCENT = 'process.runtime.jvm.system.cpu.utilization'; +export const METRIC_OTEL_JVM_GC_DURATION = 'process.runtime.jvm.gc.duration'; +export const VALUE_OTEL_JVM_PROCESS_MEMORY_HEAP = 'heap'; +export const VALUE_OTEL_JVM_PROCESS_MEMORY_NON_HEAP = 'non_heap'; + +// Metadata +export const TIER = '_tier'; +export const INDEX = '_index'; +export const DATA_STEAM_TYPE = 'data_stream.type'; + +// Mobile +export const NETWORK_CONNECTION_TYPE = 'network.connection.type'; +export const DEVICE_MODEL_IDENTIFIER = 'device.model.identifier'; +export const SESSION_ID = 'session.id'; +export const APP_LAUNCH_TIME = 'application.launch.time'; +export const EVENT_NAME = 'event.name'; + +// Location +export const CLIENT_GEO_COUNTRY_ISO_CODE = 'client.geo.country_iso_code'; +export const CLIENT_GEO_REGION_ISO_CODE = 'client.geo.region_iso_code'; +export const CLIENT_GEO_COUNTRY_NAME = 'client.geo.country_name'; +export const CLIENT_GEO_CITY_NAME = 'client.geo.city_name'; +export const CLIENT_GEO_REGION_NAME = 'client.geo.region_name'; + +export const CHILD_ID = 'child.id'; diff --git a/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts b/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts new file mode 100644 index 0000000000000..a750c39c775d2 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts @@ -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 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 { Observer } from './fields/observer'; + +// all documents types extend APMBaseDoc and inherit all properties +export interface APMBaseDoc { + '@timestamp': string; + agent: { + name: string; + version: string; + }; + parent?: { id: string }; // parent ID is not available on root transactions + trace?: { id: string }; + labels?: { + [key: string]: string | number | boolean; + }; + observer?: Observer; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts b/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts new file mode 100644 index 0000000000000..f0157a6a08376 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts @@ -0,0 +1,75 @@ +/* + * 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 { APMBaseDoc } from './apm_base_doc'; +import { + Container, + Host, + Http, + Kubernetes, + Page, + Process, + Service, + Stackframe, + TimestampUs, + Url, + User, +} from './fields'; + +export interface Processor { + name: 'error'; + event: 'error'; +} + +export interface Exception { + attributes?: { + response?: string; + }; + code?: string; + message?: string; // either message or type are given + type?: string; + module?: string; + handled?: boolean; + stacktrace?: Stackframe[]; +} + +export interface Log { + message: string; + stacktrace?: Stackframe[]; +} + +export interface ErrorRaw extends APMBaseDoc { + processor: Processor; + timestamp: TimestampUs; + transaction?: { + id: string; + sampled?: boolean; + type: string; + }; + error: { + id: string; + culprit?: string; + grouping_key: string; + // either exception or log are given + exception?: Exception[]; + page?: Page; // special property for RUM: shared by error and transaction + log?: Log; + stack_trace?: string; + custom?: Record; + }; + + // Shared by errors and transactions + container?: Container; + host?: Host; + http?: Http; + kubernetes?: Kubernetes; + process?: Process; + service: Service; + url?: Url; + user?: User; +} diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/error_with_code.ts b/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts similarity index 50% rename from packages/analytics/ebt/shippers/elastic_v3/common/src/error_with_code.ts rename to packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts index a7bad9063bec7..f8d3124914239 100644 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/error_with_code.ts +++ b/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts @@ -6,16 +6,21 @@ * Side Public License, v 1. */ -/** - * Custom error to report the error message with an additional error code. - */ -export class ErrorWithCode extends Error { - /** - * Constructor of the error. - * @param message The error message. - * @param code The code of the error. - */ - constructor(message: string, public readonly code: string) { - super(message); - } +import { APMBaseDoc } from './apm_base_doc'; +import { TimestampUs } from './fields/timestamp_us'; + +export interface EventRaw extends APMBaseDoc { + timestamp: TimestampUs; + transaction?: { + id: string; + sampled?: boolean; + type: string; + }; + log: { + message?: string; + }; + event: { + action: string; + category: string; + }; } diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts new file mode 100644 index 0000000000000..eaad379f5069b --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 Cloud { + availability_zone?: string; + instance?: { + name: string; + id: string; + }; + machine?: { + type: string; + }; + project?: { + id: string; + name: string; + }; + provider?: string; + region?: string; + account?: { + id: string; + name: string; + }; + image?: { + id: string; + }; + service?: { + name: string; + }; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts new file mode 100644 index 0000000000000..ae6526ad9ff92 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 Container { + id?: string | null; + image?: string | null; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts new file mode 100644 index 0000000000000..53c19ab293d9b --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.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 type EventOutcome = 'success' | 'failure' | 'unknown'; diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts new file mode 100644 index 0000000000000..9054839b82902 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface Faas { + id: string; + coldstart?: boolean; + execution?: string; + trigger?: { + type?: string; + request_id?: string; + }; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts new file mode 100644 index 0000000000000..7a12a8eba824f --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface Host { + architecture?: string; + hostname?: string; + name?: string; + ip?: string; + os?: { + platform?: string; + }; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts new file mode 100644 index 0000000000000..3e16e5dceb80c --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface Http { + request?: { method: string; [key: string]: unknown }; + response?: { status_code: number; [key: string]: unknown }; + version?: string; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/index.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/index.ts new file mode 100644 index 0000000000000..aa8355934fbb4 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/index.ts @@ -0,0 +1,25 @@ +/* + * 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'; +export * from './container'; +export * from './event_outcome'; +export * from './faas'; +export * from './host'; +export * from './http'; +export * from './kubernetes'; +export * from './observer'; +export * from './page'; +export * from './process'; +export * from './service'; +export * from './span_links'; +export * from './stackframe'; +export * from './timestamp_us'; +export * from './url'; +export * from './user_agent'; +export * from './user'; diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts new file mode 100644 index 0000000000000..09667f08d441c --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.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 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 Kubernetes { + pod?: { uid?: string | null; [key: string]: unknown }; + namespace?: string; + replicaset?: { + name?: string; + }; + deployment?: { + name?: string; + }; + container?: { + id?: string; + name?: string; + }; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts new file mode 100644 index 0000000000000..b035c0210bb35 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface Observer { + ephemeral_id?: string; + hostname?: string; + id?: string; + name?: string; + type?: string; + version: string; + version_major: number; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts new file mode 100644 index 0000000000000..1c2548cb777cd --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +// only for RUM agent: shared by error and transaction +export interface Page { + url: string; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts new file mode 100644 index 0000000000000..25db0098f8d3d --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/process.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 Process { + args?: string[]; + pid: number; + ppid?: number; + title?: string; +} diff --git a/packages/analytics/ebt/shippers/elastic_v3/common/src/events_to_ndjson.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts similarity index 54% rename from packages/analytics/ebt/shippers/elastic_v3/common/src/events_to_ndjson.ts rename to packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts index bfd5aabc1223a..ff01bfc8517e8 100644 --- a/packages/analytics/ebt/shippers/elastic_v3/common/src/events_to_ndjson.ts +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts @@ -6,12 +6,23 @@ * Side Public License, v 1. */ -import type { Event } from '../../../../client'; - -/** - * Converts an array of events to a single ndjson string. - * @param events An array of events {@link Event} - */ -export function eventsToNDJSON(events: Event[]): string { - return `${events.map((event) => JSON.stringify(event)).join('\n')}\n`; +export interface Service { + name: string; + environment?: string; + framework?: { + name: string; + version?: string; + }; + node?: { + name?: string; + }; + runtime?: { + name: string; + version: string; + }; + language?: { + name: string; + version?: string; + }; + version?: string; } diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts new file mode 100644 index 0000000000000..13ffc4d7075f1 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 SpanLink { + trace: { id: string }; + span: { id: string }; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts new file mode 100644 index 0000000000000..b2b1cf8000103 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +interface Line { + column?: number; + number: number; +} + +interface Sourcemap { + error?: string; + updated?: boolean; +} + +interface StackframeBase { + abs_path?: string; + classname?: string; + context?: { + post?: string[]; + pre?: string[]; + }; + exclude_from_grouping?: boolean; + filename?: string; + function?: string; + module?: string; + library_frame?: boolean; + line?: Line; + sourcemap?: Sourcemap; + vars?: { + [key: string]: unknown; + }; +} + +export type StackframeWithLineContext = StackframeBase & { + line: Line & { + context: string; + }; +}; + +export type Stackframe = StackframeBase | StackframeWithLineContext; diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts new file mode 100644 index 0000000000000..17c06c8e38156 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface TimestampUs { + us: number; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts new file mode 100644 index 0000000000000..4fa149e6b65d6 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface Url { + domain?: string; + full: string; + original?: string; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts new file mode 100644 index 0000000000000..ced460ececd17 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface User { + id: string; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts b/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts new file mode 100644 index 0000000000000..0658d408dbe54 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts @@ -0,0 +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 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 UserAgent { + device?: { + name: string; + }; + name?: string; + original: string; + os?: { + name: string; + version?: string; + full?: string; + }; + version?: string; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/index.ts b/packages/kbn-apm-types/src/es_schemas/raw/index.ts new file mode 100644 index 0000000000000..addd3279f2586 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 './apm_base_doc'; +export * from './error_raw'; +export * from './event_raw'; +export * from './metric_raw'; +export * from './span_raw'; +export * from './transaction_raw'; diff --git a/packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts b/packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts new file mode 100644 index 0000000000000..29a8dc921f3d9 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts @@ -0,0 +1,124 @@ +/* + * 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 { APMBaseDoc } from './apm_base_doc'; +import { Cloud } from './fields/cloud'; +import { Container } from './fields/container'; +import { Host } from './fields/host'; +import { Kubernetes } from './fields/kubernetes'; +import { Service } from './fields/service'; + +type BaseMetric = APMBaseDoc & { + processor: { + name: 'metric'; + event: 'metric'; + }; + cloud?: Cloud; + container?: Container; + kubernetes?: Kubernetes; + service?: Service; + host?: Host; +}; + +type BaseBreakdownMetric = BaseMetric & { + transaction: { + name: string; + type: string; + }; + span: { + self_time: { + count: number; + sum: { + us: number; + }; + }; + }; +}; + +type TransactionBreakdownMetric = BaseBreakdownMetric & { + transaction: { + duration: { + count: number; + sum: { + us: number; + }; + }; + breakdown: { + count: number; + }; + }; +}; + +type SpanBreakdownMetric = BaseBreakdownMetric & { + span: { + type: string; + subtype?: string; + }; +}; + +type SystemMetric = BaseMetric & { + system: unknown; + service: { + node?: { + name: string; + }; + }; +}; + +type CGroupMetric = SystemMetric; +type JVMMetric = SystemMetric & { + jvm: unknown; +}; + +type TransactionDurationMetric = BaseMetric & { + transaction: { + name: string; + type: string; + result?: string; + duration: { + histogram: { + values: number[]; + counts: number[]; + }; + }; + }; + service: { + name: string; + node?: { + name: string; + }; + environment?: string; + version?: string; + }; +}; + +export type SpanDestinationMetric = BaseMetric & { + span: { + destination: { + service: { + resource: string; + response_time: { + count: number; + sum: { + us: number; + }; + }; + }; + }; + }; +}; + +export type MetricRaw = + | BaseMetric + | TransactionBreakdownMetric + | SpanBreakdownMetric + | TransactionDurationMetric + | SpanDestinationMetric + | SystemMetric + | CGroupMetric + | JVMMetric; diff --git a/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts b/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts new file mode 100644 index 0000000000000..0d45d3bb00cc4 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts @@ -0,0 +1,80 @@ +/* + * 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 { APMBaseDoc } from './apm_base_doc'; +import { EventOutcome } from './fields/event_outcome'; +import { Http } from './fields/http'; +import { SpanLink } from './fields/span_links'; +import { Stackframe } from './fields/stackframe'; +import { TimestampUs } from './fields/timestamp_us'; +import { Url } from './fields/url'; + +interface Processor { + name: 'transaction'; + event: 'span'; +} + +export interface SpanRaw extends APMBaseDoc { + processor: Processor; + trace: { id: string }; // trace is required + event?: { outcome?: EventOutcome }; + service: { + name: string; + environment?: string; + }; + span: { + destination?: { + service: { + resource: string; + }; + }; + action?: string; + duration: { us: number }; + id: string; + name: string; + stacktrace?: Stackframe[]; + subtype?: string; + sync?: boolean; + type: string; + http?: { + url?: { + original?: string; + }; + response: { + status_code: number; + }; + method?: string; + }; + db?: { + statement?: string; + type?: string; + }; + message?: { + queue?: { name: string }; + age?: { ms: number }; + body?: string; + headers?: Record; + }; + composite?: { + count: number; + sum: { us: number }; + compression_strategy: string; + }; + links?: SpanLink[]; + }; + timestamp: TimestampUs; + transaction?: { + id: string; + }; + child?: { id: string[] }; + code?: { + stacktrace?: string; + }; + http?: Http; + url?: Url; +} diff --git a/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts b/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts new file mode 100644 index 0000000000000..6505e2808f795 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.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 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 { APMBaseDoc } from './apm_base_doc'; +import { Cloud } from './fields/cloud'; +import { Container } from './fields/container'; +import { EventOutcome } from './fields/event_outcome'; +import { Host } from './fields/host'; +import { Http } from './fields/http'; +import { Kubernetes } from './fields/kubernetes'; +import { Page } from './fields/page'; +import { Process } from './fields/process'; +import { Service } from './fields/service'; +import { TimestampUs } from './fields/timestamp_us'; +import { Url } from './fields/url'; +import { User } from './fields/user'; +import { UserAgent } from './fields/user_agent'; +import { Faas } from './fields/faas'; +import { SpanLink } from './fields/span_links'; + +interface Processor { + name: 'transaction'; + event: 'transaction'; +} + +export interface TransactionRaw extends APMBaseDoc { + processor: Processor; + timestamp: TimestampUs; + trace: { id: string }; // trace is required + event?: { outcome?: EventOutcome }; + transaction: { + duration: { us: number }; + id: string; + marks?: { + // "agent": not defined by APM Server - only sent by RUM agent + agent?: { + [name: string]: number; + }; + }; + name?: string; + page?: Page; // special property for RUM: shared by error and transaction + result?: string; + sampled: boolean; + span_count?: { + started?: number; + dropped?: number; + }; + type: string; + custom?: Record; + message?: { + queue?: { name: string }; + age?: { ms: number }; + body?: string; + headers?: Record; + }; + }; + + // Shared by errors and transactions + container?: Container; + ecs?: { version?: string }; + host?: Host; + http?: Http; + kubernetes?: Kubernetes; + process?: Process; + service: Service; + url?: Url; + user?: User; + user_agent?: UserAgent; + cloud?: Cloud; + faas?: Faas; + span?: { + links?: SpanLink[]; + }; +} diff --git a/packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts b/packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts new file mode 100644 index 0000000000000..fad4190a229ef --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ErrorRaw } from '../raw/error_raw'; +import { Agent } from './fields/agent'; + +export interface APMError extends ErrorRaw { + agent: Agent; +} diff --git a/packages/kbn-apm-types/src/es_schemas/ui/event.ts b/packages/kbn-apm-types/src/es_schemas/ui/event.ts new file mode 100644 index 0000000000000..8d0fd78f5f0f9 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/ui/event.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { EventRaw } from '../raw/event_raw'; +import { Agent } from './fields/agent'; + +export interface Event extends EventRaw { + agent: Agent; +} diff --git a/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts b/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts new file mode 100644 index 0000000000000..85cb7340fdda6 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { AgentName } from '@kbn/elastic-agent-utils'; + +export type { ElasticAgentName, OpenTelemetryAgentName, AgentName } from '@kbn/elastic-agent-utils'; + +export interface Agent { + ephemeral_id?: string; + name: AgentName; + version: string; +} diff --git a/packages/kbn-apm-types/src/es_schemas/ui/fields/index.ts b/packages/kbn-apm-types/src/es_schemas/ui/fields/index.ts new file mode 100644 index 0000000000000..1e64e14e07f8a --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/ui/fields/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 './agent'; diff --git a/packages/analytics/ebt/shippers/elastic_v3/browser/index.ts b/packages/kbn-apm-types/src/es_schemas/ui/index.ts similarity index 72% rename from packages/analytics/ebt/shippers/elastic_v3/browser/index.ts rename to packages/kbn-apm-types/src/es_schemas/ui/index.ts index 05619fba6e6e3..26f716289aaff 100644 --- a/packages/analytics/ebt/shippers/elastic_v3/browser/index.ts +++ b/packages/kbn-apm-types/src/es_schemas/ui/index.ts @@ -6,5 +6,8 @@ * Side Public License, v 1. */ -export type { ElasticV3ShipperOptions } from '../common'; -export { ElasticV3BrowserShipper } from './src/browser_shipper'; +export * from './apm_error'; +export * from './event'; +export * from './metric'; +export * from './span'; +export * from './transaction'; diff --git a/packages/kbn-apm-types/src/es_schemas/ui/metric.ts b/packages/kbn-apm-types/src/es_schemas/ui/metric.ts new file mode 100644 index 0000000000000..bd9391e269554 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/ui/metric.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { MetricRaw } from '../raw/metric_raw'; + +export type Metric = MetricRaw; diff --git a/packages/kbn-apm-types/src/es_schemas/ui/span.ts b/packages/kbn-apm-types/src/es_schemas/ui/span.ts new file mode 100644 index 0000000000000..5e09b84b87df2 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/ui/span.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { SpanRaw } from '../raw/span_raw'; +import { Agent } from './fields/agent'; + +export interface Span extends SpanRaw { + agent: Agent; +} diff --git a/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts b/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts new file mode 100644 index 0000000000000..ea5ccf5fd6434 --- /dev/null +++ b/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { TransactionRaw } from '../raw/transaction_raw'; +import { Agent } from './fields/agent'; + +// Make `transaction.name` required instead of optional. +// `transaction.name` can be missing in Elasticsearch but the UI will only aggregate on transactions with a name, +// and thus it doesn't make sense to treat it as optional +type InnerTransaction = TransactionRaw['transaction']; +interface InnerTransactionWithName extends InnerTransaction { + name: string; +} + +export interface Transaction extends TransactionRaw { + agent: Agent; + transaction: InnerTransactionWithName; +} diff --git a/packages/kbn-apm-types/tsconfig.json b/packages/kbn-apm-types/tsconfig.json new file mode 100644 index 0000000000000..312ebd695e48e --- /dev/null +++ b/packages/kbn-apm-types/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "node" + ] + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/elastic-agent-utils", + ] +} diff --git a/packages/kbn-config/kibana.jsonc b/packages/kbn-config/kibana.jsonc index c6b4d1dc742c7..f16969225e90c 100644 --- a/packages/kbn-config/kibana.jsonc +++ b/packages/kbn-config/kibana.jsonc @@ -1,5 +1,5 @@ { - "type": "shared-common", + "type": "shared-server", "id": "@kbn/config", "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-docs-utils/kibana.jsonc b/packages/kbn-docs-utils/kibana.jsonc index 9700d3341a77a..b7aca4927aef8 100644 --- a/packages/kbn-docs-utils/kibana.jsonc +++ b/packages/kbn-docs-utils/kibana.jsonc @@ -1,5 +1,5 @@ { - "type": "shared-common", + "type": "shared-server", "id": "@kbn/docs-utils", "devOnly": true, "owner": "@elastic/kibana-operations" diff --git a/packages/kbn-ebt-tools/src/performance_metric_events/helpers.test.ts b/packages/kbn-ebt-tools/src/performance_metric_events/helpers.test.ts index de4271a474961..a1021b9aa9dcd 100644 --- a/packages/kbn-ebt-tools/src/performance_metric_events/helpers.test.ts +++ b/packages/kbn-ebt-tools/src/performance_metric_events/helpers.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { createAnalytics, type AnalyticsClient } from '@kbn/ebt/client'; +import { createAnalytics, type AnalyticsClient } from '@elastic/ebt/client'; import { loggerMock } from '@kbn/logging-mocks'; import { registerPerformanceMetricEventType, reportPerformanceMetricEvent } from './helpers'; import { METRIC_EVENT_SCHEMA } from './schema'; @@ -18,7 +18,6 @@ describe('performance metric event helpers', () => { beforeEach(() => { analyticsClient = createAnalytics({ isDev: true, // Explicitly setting `true` to ensure we have event validation to make sure the events sent pass our validation. - sendTo: 'staging', logger: loggerMock.create(), }); }); @@ -39,7 +38,6 @@ describe('performance metric event helpers', () => { beforeEach(() => { analyticsClient = createAnalytics({ isDev: true, // Explicitly setting `true` to ensure we have event validation to make sure the events sent pass our validation. - sendTo: 'staging', logger: loggerMock.create(), }); registerPerformanceMetricEventType(analyticsClient); diff --git a/packages/kbn-ebt-tools/src/performance_metric_events/helpers.ts b/packages/kbn-ebt-tools/src/performance_metric_events/helpers.ts index 2763222c60d1f..518375f1137b7 100644 --- a/packages/kbn-ebt-tools/src/performance_metric_events/helpers.ts +++ b/packages/kbn-ebt-tools/src/performance_metric_events/helpers.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { AnalyticsClient } from '@kbn/ebt/client'; +import type { AnalyticsClient } from '@elastic/ebt/client'; import { type PerformanceMetricEvent, METRIC_EVENT_SCHEMA } from './schema'; const PERFORMANCE_METRIC_EVENT_TYPE = 'performance_metric'; diff --git a/packages/kbn-ebt-tools/src/performance_metric_events/schema.ts b/packages/kbn-ebt-tools/src/performance_metric_events/schema.ts index b841b9b8d6f1d..8919fdc485d13 100644 --- a/packages/kbn-ebt-tools/src/performance_metric_events/schema.ts +++ b/packages/kbn-ebt-tools/src/performance_metric_events/schema.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { RootSchema } from '@kbn/ebt/client'; +import type { RootSchema } from '@elastic/ebt/client'; /** * Structure of the `metric` event diff --git a/packages/kbn-ebt-tools/tsconfig.json b/packages/kbn-ebt-tools/tsconfig.json index 881349b3f4d9b..680ae75219fff 100644 --- a/packages/kbn-ebt-tools/tsconfig.json +++ b/packages/kbn-ebt-tools/tsconfig.json @@ -6,8 +6,7 @@ }, "include": ["**/*.ts", "**/*.tsx"], "kbn_references": [ - "@kbn/logging-mocks", - "@kbn/ebt", + "@kbn/logging-mocks" ], "exclude": ["target/**/*"] } diff --git a/packages/kbn-esql-ast/src/__tests__/ast_parser.commands.test.ts b/packages/kbn-esql-ast/src/__tests__/ast_parser.commands.test.ts new file mode 100644 index 0000000000000..a636f4a448595 --- /dev/null +++ b/packages/kbn-esql-ast/src/__tests__/ast_parser.commands.test.ts @@ -0,0 +1,369 @@ +/* + * 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 { getAstAndSyntaxErrors as parse } from '../ast_parser'; + +describe('commands', () => { + describe('correctly formatted, basic usage', () => { + it('SHOW', () => { + const query = 'SHOW info'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'show', + args: [ + { + type: 'function', + name: 'info', + }, + ], + }, + ]); + }); + + it('META', () => { + const query = 'META functions'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'meta', + args: [ + { + type: 'function', + name: 'functions', + }, + ], + }, + ]); + }); + + it('FROM', () => { + const query = 'FROM index'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'from', + args: [ + { + type: 'source', + name: 'index', + }, + ], + }, + ]); + }); + + it('ROW', () => { + const query = 'ROW 1'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + { + type: 'command', + name: 'row', + args: [ + { + type: 'literal', + value: 1, + }, + ], + }, + ]); + }); + + it('EVAL', () => { + const query = 'FROM index | EVAL 1'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'eval', + args: [ + { + type: 'literal', + value: 1, + }, + ], + }, + ]); + }); + + it('STATS', () => { + const query = 'FROM index | STATS 1'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'stats', + args: [ + { + type: 'literal', + value: 1, + }, + ], + }, + ]); + }); + + it('LIMIT', () => { + const query = 'FROM index | LIMIT 1'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'limit', + args: [ + { + type: 'literal', + value: 1, + }, + ], + }, + ]); + }); + + it('KEEP', () => { + const query = 'FROM index | KEEP abc'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'keep', + args: [ + { + type: 'column', + name: 'abc', + }, + ], + }, + ]); + }); + + it('SORT', () => { + const query = 'FROM index | SORT 1'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'sort', + args: [ + { + type: 'literal', + value: 1, + }, + ], + }, + ]); + }); + + it('WHERE', () => { + const query = 'FROM index | WHERE 1'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'where', + args: [ + { + type: 'literal', + value: 1, + }, + ], + }, + ]); + }); + + it('DROP', () => { + const query = 'FROM index | DROP abc'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'drop', + args: [ + { + type: 'column', + name: 'abc', + }, + ], + }, + ]); + }); + + it('RENAME', () => { + const query = 'FROM index | RENAME a AS b, c AS d'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'rename', + args: [ + { + type: 'option', + name: 'as', + args: [ + { + type: 'column', + name: 'a', + }, + { + type: 'column', + name: 'b', + }, + ], + }, + { + type: 'option', + name: 'as', + args: [ + { + type: 'column', + name: 'c', + }, + { + type: 'column', + name: 'd', + }, + ], + }, + ], + }, + ]); + }); + + it('DISSECT', () => { + const query = 'FROM index | DISSECT a "b" APPEND_SEPARATOR="c"'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'dissect', + args: [ + { + type: 'column', + name: 'a', + }, + { + type: 'literal', + value: '"b"', + }, + { + type: 'option', + name: 'append_separator', + args: [ + { + type: 'literal', + value: '"c"', + }, + ], + }, + ], + }, + ]); + }); + + it('GROK', () => { + const query = 'FROM index | GROK a "b"'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'grok', + args: [ + { + type: 'column', + name: 'a', + }, + { + type: 'literal', + value: '"b"', + }, + ], + }, + ]); + }); + + it('ENRICH', () => { + const query = 'FROM index | ENRICH a ON b WITH c, d'; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'enrich', + args: [ + { + type: 'source', + name: 'a', + }, + { + type: 'option', + name: 'on', + args: [ + { + type: 'column', + name: 'b', + }, + ], + }, + { + type: 'option', + name: 'with', + }, + ], + }, + ]); + }); + + it('MV_EXPAND', () => { + const query = 'FROM index | MV_EXPAND a '; + const { ast } = parse(query); + + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'mv_expand', + args: [ + { + type: 'column', + name: 'a', + }, + ], + }, + ]); + }); + }); +}); diff --git a/packages/kbn-esql-ast/src/__tests__/ast_parser.literal.test.ts b/packages/kbn-esql-ast/src/__tests__/ast_parser.literal.test.ts new file mode 100644 index 0000000000000..1f941c49f0fbe --- /dev/null +++ b/packages/kbn-esql-ast/src/__tests__/ast_parser.literal.test.ts @@ -0,0 +1,25 @@ +/* + * 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 { getAstAndSyntaxErrors as parse } from '../ast_parser'; +import { ESQLLiteral } from '../types'; + +describe('literal expression', () => { + it('numeric expression captures "value", and "name" fields', () => { + const text = 'ROW 1'; + const { ast } = parse(text); + const literal = ast[0].args[0] as ESQLLiteral; + + expect(literal).toMatchObject({ + type: 'literal', + literalType: 'integer', + name: '1', + value: 1, + }); + }); +}); diff --git a/packages/kbn-esql-ast/src/__tests__/ast_parser.sort.test.ts b/packages/kbn-esql-ast/src/__tests__/ast_parser.sort.test.ts new file mode 100644 index 0000000000000..ccfbceb890893 --- /dev/null +++ b/packages/kbn-esql-ast/src/__tests__/ast_parser.sort.test.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 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 { getAstAndSyntaxErrors as parse } from '../ast_parser'; + +describe('SORT', () => { + describe('correctly formatted', () => { + // Un-skip one https://github.com/elastic/kibana/issues/189491 fixed. + it.skip('example from documentation', () => { + const text = ` + FROM employees + | KEEP first_name, last_name, height + | SORT height DESC + `; + const { ast, errors } = parse(text); + + expect(errors.length).toBe(0); + expect(ast).toMatchObject([ + {}, + {}, + { + type: 'command', + name: 'sort', + args: [ + { + type: 'column', + name: 'height', + }, + ], + }, + ]); + }); + + // Un-skip once https://github.com/elastic/kibana/issues/189491 fixed. + it.skip('can parse various sorting columns with options', () => { + const text = + 'FROM a | SORT a, b ASC, c DESC, d NULLS FIRST, e NULLS LAST, f ASC NULLS FIRST, g DESC NULLS LAST'; + const { ast, errors } = parse(text); + + expect(errors.length).toBe(0); + expect(ast).toMatchObject([ + {}, + { + type: 'command', + name: 'sort', + args: [ + { + type: 'column', + name: 'a', + }, + { + type: 'column', + name: 'b', + }, + { + type: 'column', + name: 'c', + }, + { + type: 'column', + name: 'd', + }, + { + type: 'column', + name: 'e', + }, + { + type: 'column', + name: 'f', + }, + { + type: 'column', + name: 'g', + }, + ], + }, + ]); + }); + }); +}); diff --git a/packages/kbn-esql-ast/src/__tests__/ast_parser.where.test.ts b/packages/kbn-esql-ast/src/__tests__/ast_parser.where.test.ts new file mode 100644 index 0000000000000..34148ec1aecd2 --- /dev/null +++ b/packages/kbn-esql-ast/src/__tests__/ast_parser.where.test.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { getAstAndSyntaxErrors as parse } from '../ast_parser'; + +describe('WHERE', () => { + describe('correctly formatted', () => { + it('example from documentation', () => { + const text = ` + FROM employees + | KEEP first_name, last_name, still_hired + | WHERE still_hired == true + `; + const { ast, errors } = parse(text); + + expect(errors.length).toBe(0); + expect(ast).toMatchObject([ + {}, + {}, + { + type: 'command', + name: 'where', + args: [ + { + type: 'function', + name: '==', + }, + ], + }, + ]); + }); + }); +}); diff --git a/packages/kbn-esql-ast/src/ast_factory.ts b/packages/kbn-esql-ast/src/ast_factory.ts index f389be63b3afd..cd73bc79a3887 100644 --- a/packages/kbn-esql-ast/src/ast_factory.ts +++ b/packages/kbn-esql-ast/src/ast_factory.ts @@ -205,7 +205,7 @@ export class AstListener implements ESQLParserListener { const command = createCommand('limit', ctx); this.ast.push(command); if (ctx.getToken(esql_parser.INTEGER_LITERAL, 0)) { - const literal = createLiteral('number', ctx.INTEGER_LITERAL()); + const literal = createLiteral('integer', ctx.INTEGER_LITERAL()); if (literal) { command.args.push(literal); } diff --git a/packages/kbn-esql-ast/src/ast_helpers.ts b/packages/kbn-esql-ast/src/ast_helpers.ts index cc6488d5bbc0c..6ebb3fb9c4490 100644 --- a/packages/kbn-esql-ast/src/ast_helpers.ts +++ b/packages/kbn-esql-ast/src/ast_helpers.ts @@ -35,7 +35,9 @@ import type { ESQLCommandMode, ESQLInlineCast, ESQLUnknownItem, + ESQLNumericLiteralType, FunctionSubtype, + ESQLNumericLiteral, } from './types'; export function nonNullable(v: T): v is NonNullable { @@ -87,11 +89,14 @@ export function createList(ctx: ParserRuleContext, values: ESQLLiteral[]): ESQLL }; } -export function createNumericLiteral(ctx: DecimalValueContext | IntegerValueContext): ESQLLiteral { +export function createNumericLiteral( + ctx: DecimalValueContext | IntegerValueContext, + literalType: ESQLNumericLiteralType +): ESQLLiteral { const text = ctx.getText(); return { type: 'literal', - literalType: 'number', + literalType, text, name: text, value: Number(text), @@ -100,10 +105,13 @@ export function createNumericLiteral(ctx: DecimalValueContext | IntegerValueCont }; } -export function createFakeMultiplyLiteral(ctx: ArithmeticUnaryContext): ESQLLiteral { +export function createFakeMultiplyLiteral( + ctx: ArithmeticUnaryContext, + literalType: ESQLNumericLiteralType +): ESQLLiteral { return { type: 'literal', - literalType: 'number', + literalType, text: ctx.getText(), name: ctx.getText(), value: ctx.PLUS() ? 1 : -1, @@ -158,12 +166,13 @@ export function createLiteral( location: getPosition(node.symbol), incomplete: isMissingText(text), }; - if (type === 'number') { + if (type === 'decimal' || type === 'integer') { return { ...partialLiteral, literalType: type, value: Number(text), - }; + paramType: 'number', + } as ESQLNumericLiteral<'decimal'> | ESQLNumericLiteral<'integer'>; } else if (type === 'param') { throw new Error('Should never happen'); } @@ -171,7 +180,7 @@ export function createLiteral( ...partialLiteral, literalType: type, value: text, - }; + } as ESQLLiteral; } export function createTimeUnit(ctx: QualifiedIntegerLiteralContext): ESQLTimeInterval { diff --git a/packages/kbn-esql-ast/src/ast_walker.ts b/packages/kbn-esql-ast/src/ast_walker.ts index 1b603975cf68f..3a0f182215c3e 100644 --- a/packages/kbn-esql-ast/src/ast_walker.ts +++ b/packages/kbn-esql-ast/src/ast_walker.ts @@ -84,7 +84,7 @@ import { createUnknownItem, } from './ast_helpers'; import { getPosition } from './ast_position_utils'; -import type { +import { ESQLLiteral, ESQLColumn, ESQLFunction, @@ -289,7 +289,7 @@ function visitOperatorExpression( const arg = visitOperatorExpression(ctx.operatorExpression()); // this is a number sign thing const fn = createFunction('*', ctx, undefined, 'binary-expression'); - fn.args.push(createFakeMultiplyLiteral(ctx)); + fn.args.push(createFakeMultiplyLiteral(ctx, 'integer')); if (arg) { fn.args.push(arg); } @@ -328,16 +328,21 @@ function getConstant(ctx: ConstantContext): ESQLAstItem { // e.g. 1 year, 15 months return createTimeUnit(ctx); } + + // Decimal type covers multiple ES|QL types: long, double, etc. if (ctx instanceof DecimalLiteralContext) { - return createNumericLiteral(ctx.decimalValue()); + return createNumericLiteral(ctx.decimalValue(), 'decimal'); } + + // Integer type encompasses integer if (ctx instanceof IntegerLiteralContext) { - return createNumericLiteral(ctx.integerValue()); + return createNumericLiteral(ctx.integerValue(), 'integer'); } if (ctx instanceof BooleanLiteralContext) { return getBooleanValue(ctx); } if (ctx instanceof StringLiteralContext) { + // String literal covers multiple ES|QL types: text and keyword types return createLiteral('string', ctx.string_().QUOTED_STRING()); } if ( @@ -346,14 +351,18 @@ function getConstant(ctx: ConstantContext): ESQLAstItem { ctx instanceof StringArrayLiteralContext ) { const values: ESQLLiteral[] = []; + for (const numericValue of ctx.getTypedRuleContexts(NumericValueContext)) { + const isDecimal = + numericValue.decimalValue() !== null && numericValue.decimalValue() !== undefined; const value = numericValue.decimalValue() || numericValue.integerValue(); - values.push(createNumericLiteral(value!)); + values.push(createNumericLiteral(value!, isDecimal ? 'decimal' : 'integer')); } for (const booleanValue of ctx.getTypedRuleContexts(BooleanValueContext)) { values.push(getBooleanValue(booleanValue)!); } for (const string of ctx.getTypedRuleContexts(StringContext)) { + // String literal covers multiple ES|QL types: text and keyword types const literal = createLiteral('string', string.QUOTED_STRING()); if (literal) { values.push(literal); diff --git a/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.test.mocks.ts b/packages/kbn-esql-ast/src/builder/index.test.ts similarity index 59% rename from packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.test.mocks.ts rename to packages/kbn-esql-ast/src/builder/index.test.ts index 8da36242d48b6..d8199027ea1c8 100644 --- a/packages/analytics/ebt/shippers/elastic_v3/server/src/server_shipper.test.mocks.ts +++ b/packages/kbn-esql-ast/src/builder/index.test.ts @@ -6,10 +6,15 @@ * Side Public License, v 1. */ -export const fetchMock = jest.fn().mockResolvedValue({ - status: 200, - ok: true, - text: () => Promise.resolve('{"status": "ok"}'), -}); +import { Builder } from '.'; + +test('can mint a numeric literal', () => { + const node = Builder.numericLiteral({ value: 42 }); -jest.doMock('node-fetch', () => fetchMock); + expect(node).toMatchObject({ + type: 'literal', + literalType: 'integer', + name: '42', + value: 42, + }); +}); diff --git a/packages/kbn-esql-ast/src/builder/index.ts b/packages/kbn-esql-ast/src/builder/index.ts new file mode 100644 index 0000000000000..524301111ed4d --- /dev/null +++ b/packages/kbn-esql-ast/src/builder/index.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ESQLDecimalLiteral, ESQLIntegerLiteral, ESQLNumericLiteralType } from '../types'; +import { AstNodeParserFields, AstNodeTemplate } from './types'; + +export class Builder { + /** + * Constructs fields which are only available when the node is minted by + * the parser. + */ + public static readonly parserFields = ({ + location = { min: 0, max: 0 }, + text = '', + incomplete = false, + }: Partial): AstNodeParserFields => ({ + location, + text, + incomplete, + }); + + /** + * Constructs a integer literal node. + */ + public static readonly numericLiteral = ( + template: Omit< + AstNodeTemplate, + 'literalType' | 'name' + >, + type: ESQLNumericLiteralType = 'integer' + ): ESQLIntegerLiteral | ESQLDecimalLiteral => { + const node: ESQLIntegerLiteral | ESQLDecimalLiteral = { + ...template, + ...Builder.parserFields(template), + type: 'literal', + literalType: type, + name: template.value.toString(), + }; + + return node; + }; +} diff --git a/packages/kbn-esql-ast/src/builder/types.ts b/packages/kbn-esql-ast/src/builder/types.ts new file mode 100644 index 0000000000000..60575c0d00994 --- /dev/null +++ b/packages/kbn-esql-ast/src/builder/types.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { ESQLProperNode, ESQLAstBaseItem } from '../types'; + +/** + * Node fields which are available only when the node is minted by the parser. + * When creating nodes manually, these fields are not available. + */ +export type AstNodeParserFields = Pick; + +/** + * The node *template* transforms ES|QL AST nodes into a permissive shape, with + * the aim to: + * + * - Remove the `type` property, as the builder will set it. + * - Make properties like `text`, `location`, and `incomplete` optional, as they + * are a available only when the AST node is minted by the parser. + * - Make all other properties optional, for easy node creation. + */ +export type AstNodeTemplate = Omit< + Node, + 'type' | 'text' | 'location' | 'incomplete' +> & + Partial>; diff --git a/packages/kbn-esql-ast/src/types.ts b/packages/kbn-esql-ast/src/types.ts index 257a004e78f10..12496835ea12b 100644 --- a/packages/kbn-esql-ast/src/types.ts +++ b/packages/kbn-esql-ast/src/types.ts @@ -35,6 +35,15 @@ export type ESQLAstField = ESQLFunction | ESQLColumn; */ export type ESQLAstItem = ESQLSingleAstItem | ESQLAstItem[]; +export type ESQLAstNodeWithArgs = ESQLCommand | ESQLCommandOption | ESQLFunction; + +/** + * *Proper* are nodes which are objects with `type` property, once we get rid + * of the nodes which are plain arrays, all nodes will be *proper* and we can + * remove this type. + */ +export type ESQLProperNode = ESQLSingleAstItem | ESQLAstCommand; + export interface ESQLLocation { min: number; max: number; @@ -170,19 +179,30 @@ export interface ESQLList extends ESQLAstBaseItem { values: ESQLLiteral[]; } +export type ESQLNumericLiteralType = 'decimal' | 'integer'; + export type ESQLLiteral = - | ESQLNumberLiteral + | ESQLDecimalLiteral + | ESQLIntegerLiteral | ESQLBooleanLiteral | ESQLNullLiteral | ESQLStringLiteral | ESQLParamLiteral; +// Exporting here to prevent TypeScript error TS4058 +// Return type of exported function has or is using name 'ESQLNumericLiteral' from external module // @internal -export interface ESQLNumberLiteral extends ESQLAstBaseItem { +export interface ESQLNumericLiteral extends ESQLAstBaseItem { type: 'literal'; - literalType: 'number'; + literalType: T; value: number; } +// We cast anything as decimal (e.g. 32.12) as generic decimal numeric type here +// @internal +export type ESQLDecimalLiteral = ESQLNumericLiteral<'decimal'>; + +// @internal +export type ESQLIntegerLiteral = ESQLNumericLiteral<'integer'>; // @internal export interface ESQLBooleanLiteral extends ESQLAstBaseItem { diff --git a/packages/kbn-esql-ast/src/visitor/README.md b/packages/kbn-esql-ast/src/visitor/README.md new file mode 100644 index 0000000000000..71729bf56a0ab --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/README.md @@ -0,0 +1,69 @@ +## High-level AST structure + +Broadly, there are two AST node types: (1) commands (say `FROM ...`, like +*statements* in other languages), and (2) expressions (say `a + b`, or `fn()`). + + +### Commands + +Commands in ES|QL are like *statements* in other languages. They are the top +level nodes in the AST. + +The root node of the AST is considered to bye the "query" node. It contains a +list of commands. + +``` +Quey = Command[] +``` + +Each command receives a list of positional arguments. For example: + +``` +COMMAND arg1, arg2, arg3 +``` + +A command may also receive additional lists of *named* arguments, we refer to +them as `option`s. For example: + +``` +COMMAND arg1, arg2, arg3 OPTION1 arg4, arg5 OPTION2 arg6, arg7 +``` + +Essentially, one can of command arguments as a list of expressions, with the +ability to add named arguments to the command. For example, the above command +arguments can be represented as: + +```js +{ + '': [arg1, arg2, arg3], + 'option1': [arg4, arg5], + 'option2': [arg6, arg7] +} +``` + +Each command has a command specific `visitCommandX` callback, where `X` is the +name of the command. If a command-specific callback is not found, the generic +`visitCommand` callback is called. + + +### Expressions + +Expressions just like expressions in other languages. Expressions can be deeply +nested, as one expression can contain other expressions. For example, math +expressions `1 + 2`, function call expressions `fn()`, identifier expressions +`my.index` and so on. + +As of this writing, the following expressions are defined: + +- Column identifier expression, `{type: "column"}`, like `@timestamp` +- Source identifier expression, `{type: "source"}`, like `tsdb_index` +- Function call expression, `{type: "function"}`, like `fn(123)` +- Literal expression, `{type: "literal"}`, like `123`, `"hello"` +- List literal expression, `{type: "list"}`, like `[1, 2, 3]`, `["a", "b", "c"]`, `[true, false]` +- Time interval expression, `{type: "interval"}`, like `1h`, `1d`, `1w` +- Inline cast expression, `{type: "cast"}`, like `abc::int`, `def::string` +- Unknown node, `{type: "unknown"}` + +Each expression has a `visitExpressionX` callback, where `X` is the type of the +expression. If a expression-specific callback is not found, the generic +`visitExpression` callback is called. diff --git a/packages/kbn-esql-ast/src/visitor/__tests__/expressions.test.ts b/packages/kbn-esql-ast/src/visitor/__tests__/expressions.test.ts new file mode 100644 index 0000000000000..efd30f035e7ca --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/__tests__/expressions.test.ts @@ -0,0 +1,159 @@ +/* + * 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 { getAstAndSyntaxErrors } from '../../ast_parser'; +import { Visitor } from '../visitor'; + +test('"visitExpression" captures all non-captured expressions', () => { + const { ast } = getAstAndSyntaxErrors(` + FROM index + | STATS 1, "str", [true], a = b BY field + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitExpression', (ctx) => { + return ''; + }) + .on('visitCommand', (ctx) => { + const args = [...ctx.visitArguments()].join(', '); + return `${ctx.name()}${args ? ` ${args}` : ''}`; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].join(' | '); + }); + const text = visitor.visitQuery(ast); + + expect(text).toBe( + 'FROM | STATS , , , | LIMIT ' + ); +}); + +test('can terminate walk early, does not visit all literals', () => { + const numbers: number[] = []; + const { ast } = getAstAndSyntaxErrors(` + FROM index + | STATS 0, 1, 2, 3 + | LIMIT 123 + `); + const result = new Visitor() + .on('visitExpression', (ctx) => { + return 0; + }) + .on('visitLiteralExpression', (ctx) => { + numbers.push(ctx.node.value as number); + return ctx.node.value; + }) + .on('visitCommand', (ctx) => { + for (const res of ctx.visitArguments()) if (res) return res; + }) + .on('visitQuery', (ctx) => { + for (const res of ctx.visitCommands()) if (res) return res; + }) + .visitQuery(ast); + + expect(result).toBe(1); + expect(numbers).toEqual([0, 1]); +}); + +test('"visitColumnExpression" takes over all column visits', () => { + const { ast } = getAstAndSyntaxErrors(` + FROM index | STATS a + `); + const visitor = new Visitor() + .on('visitColumnExpression', (ctx) => { + return ''; + }) + .on('visitExpression', (ctx) => { + return 'E'; + }) + .on('visitCommand', (ctx) => { + const args = [...ctx.visitArguments()].join(', '); + return `${ctx.name()}${args ? ` ${args}` : ''}`; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].join(' | '); + }); + const text = visitor.visitQuery(ast); + + expect(text).toBe('FROM E | STATS '); +}); + +test('"visitSourceExpression" takes over all source visits', () => { + const { ast } = getAstAndSyntaxErrors(` + FROM index + | STATS 1, "str", [true], a = b BY field + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitSourceExpression', (ctx) => { + return ''; + }) + .on('visitExpression', (ctx) => { + return 'E'; + }) + .on('visitCommand', (ctx) => { + const args = [...ctx.visitArguments()].join(', '); + return `${ctx.name()}${args ? ` ${args}` : ''}`; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].join(' | '); + }); + const text = visitor.visitQuery(ast); + + expect(text).toBe('FROM | STATS E, E, E, E | LIMIT E'); +}); + +test('"visitFunctionCallExpression" takes over all literal visits', () => { + const { ast } = getAstAndSyntaxErrors(` + FROM index + | STATS 1, "str", [true], a = b BY field + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitFunctionCallExpression', (ctx) => { + return ''; + }) + .on('visitExpression', (ctx) => { + return 'E'; + }) + .on('visitCommand', (ctx) => { + const args = [...ctx.visitArguments()].join(', '); + return `${ctx.name()}${args ? ` ${args}` : ''}`; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].join(' | '); + }); + const text = visitor.visitQuery(ast); + + expect(text).toBe('FROM E | STATS E, E, E, | LIMIT E'); +}); + +test('"visitLiteral" takes over all literal visits', () => { + const { ast } = getAstAndSyntaxErrors(` + FROM index + | STATS 1, "str", [true], a = b BY field + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitLiteralExpression', (ctx) => { + return ''; + }) + .on('visitExpression', (ctx) => { + return 'E'; + }) + .on('visitCommand', (ctx) => { + const args = [...ctx.visitArguments()].join(', '); + return `${ctx.name()}${args ? ` ${args}` : ''}`; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].join(' | '); + }); + const text = visitor.visitQuery(ast); + + expect(text).toBe('FROM E | STATS , , E, E | LIMIT '); +}); diff --git a/packages/kbn-esql-ast/src/visitor/__tests__/scenarios.test.ts b/packages/kbn-esql-ast/src/visitor/__tests__/scenarios.test.ts new file mode 100644 index 0000000000000..ce338e8bd72ba --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/__tests__/scenarios.test.ts @@ -0,0 +1,193 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +/** + * @category Visitor Real-world Scenarios + * + * This test suite contains real-world scenarios that demonstrate how to use the + * visitor to traverse the AST and make changes to it, or how to extract useful + */ + +import { getAstAndSyntaxErrors } from '../../ast_parser'; +import { ESQLAstQueryNode } from '../types'; +import { Visitor } from '../visitor'; + +test('change LIMIT from 24 to 42', () => { + const { ast } = getAstAndSyntaxErrors(` + FROM index + | STATS 1, "str", [true], a = b BY field + | LIMIT 24 + `); + + // Find the LIMIT node + const limit = () => + new Visitor() + .on('visitLimitCommand', (ctx) => ctx.numeric()) + .on('visitCommand', () => null) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(ast) + .filter(Boolean)[0]; + + expect(limit()).toBe(24); + + // Change LIMIT to 42 + new Visitor() + .on('visitLimitCommand', (ctx) => { + ctx.setLimit(42); + }) + .on('visitCommand', () => {}) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(ast); + + expect(limit()).toBe(42); +}); + +/** + * Implement this once sorting order expressions are available: + * + * - https://github.com/elastic/kibana/issues/189491 + */ +test.todo('can modify sorting orders'); + +test('can remove a specific WHERE command', () => { + const query = getAstAndSyntaxErrors(` + FROM employees + | KEEP first_name, last_name, still_hired + | WHERE still_hired == true + | WHERE last_name == "Jeo" + | WHERE 123 == salary + `); + + const print = () => + new Visitor() + .on('visitColumnExpression', (ctx) => ctx.node.name) + .on( + 'visitFunctionCallExpression', + (ctx) => `${ctx.node.name}(${[...ctx.visitArguments()].join(', ')})` + ) + .on('visitExpression', (ctx) => '') + .on('visitCommand', (ctx) => { + if (ctx.node.name === 'where') { + const args = [...ctx.visitArguments()].join(', '); + return `${ctx.name()}${args ? ` ${args}` : ''}`; + } else { + return ''; + } + }) + .on('visitQuery', (ctx) => [...ctx.visitCommands()].filter(Boolean).join(' | ')) + .visitQuery(query.ast); + + const removeFilter = (field: string) => { + query.ast = new Visitor() + .on('visitColumnExpression', (ctx) => (ctx.node.name === field ? null : ctx.node)) + .on('visitFunctionCallExpression', (ctx) => { + const args = [...ctx.visitArguments()]; + return args.some((arg) => arg === null) ? null : ctx.node; + }) + .on('visitExpression', (ctx) => ctx.node) + .on('visitCommand', (ctx) => { + if (ctx.node.name === 'where') { + ctx.node.args = [...ctx.visitArguments()].filter(Boolean); + } + return ctx.node; + }) + .on('visitQuery', (ctx) => [...ctx.visitCommands()].filter((cmd) => cmd.args.length)) + .visitQuery(query.ast); + }; + + expect(print()).toBe( + 'WHERE ==(still_hired, ) | WHERE ==(last_name, ) | WHERE ==(, salary)' + ); + removeFilter('last_name'); + expect(print()).toBe('WHERE ==(still_hired, ) | WHERE ==(, salary)'); + removeFilter('still_hired'); + removeFilter('still_hired'); + expect(print()).toBe('WHERE ==(, salary)'); + removeFilter('still_hired'); + removeFilter('salary'); + removeFilter('salary'); + expect(print()).toBe(''); +}); + +export const prettyPrint = (ast: ESQLAstQueryNode) => + new Visitor() + .on('visitSourceExpression', (ctx) => { + return ctx.node.name; + }) + .on('visitColumnExpression', (ctx) => { + return ctx.node.name; + }) + .on('visitFunctionCallExpression', (ctx) => { + let args = ''; + for (const arg of ctx.visitArguments()) { + args += (args ? ', ' : '') + arg; + } + return `${ctx.node.name.toUpperCase()}${args ? `(${args})` : ''}`; + }) + .on('visitLiteralExpression', (ctx) => { + return ctx.node.value; + }) + .on('visitListLiteralExpression', (ctx) => { + return ''; + }) + .on('visitTimeIntervalLiteralExpression', (ctx) => { + return ''; + }) + .on('visitInlineCastExpression', (ctx) => { + return ''; + }) + .on('visitExpression', (ctx) => { + return ''; + }) + .on('visitCommandOption', (ctx) => { + let args = ''; + for (const arg of ctx.visitArguments()) { + args += (args ? ', ' : '') + arg; + } + return ctx.node.name.toUpperCase() + (args ? ` ${args}` : ''); + }) + .on('visitCommand', (ctx) => { + let args = ''; + for (const source of ctx.visitArguments()) { + args += (args ? ', ' : '') + source; + } + return `${ctx.node.name.toUpperCase()}${args ? ` ${args}` : ''}`; + }) + .on('visitFromCommand', (ctx) => { + let sources = ''; + for (const source of ctx.visitSources()) { + sources += (sources ? ', ' : '') + source; + } + let options = ''; + for (const option of ctx.visitOptions()) { + options += ' ' + option; + } + return `FROM ${sources}${options}`; + }) + .on('visitLimitCommand', (ctx) => { + return `LIMIT ${ctx.numeric() ?? 0}`; + }) + .on('visitQuery', (ctx) => { + let text = ''; + for (const cmd of ctx.visitCommands()) { + text += (text ? ' | ' : '') + cmd; + } + return text; + }) + .visitQuery(ast); + +test('can print a query to text', () => { + const { ast } = getAstAndSyntaxErrors( + 'FROM index METADATA _id, asdf, 123 | STATS fn([1,2], 1d, 1::string, x in (1, 2)), a = b | LIMIT 1000' + ); + const text = prettyPrint(ast); + + expect(text).toBe( + 'FROM index METADATA _id, asdf, 123 | STATS FN(, , , IN(x, 1, 2)), =(a, b) | LIMIT 1000' + ); +}); diff --git a/packages/kbn-esql-ast/src/visitor/__tests__/visitor.test.ts b/packages/kbn-esql-ast/src/visitor/__tests__/visitor.test.ts new file mode 100644 index 0000000000000..24944f635ee44 --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/__tests__/visitor.test.ts @@ -0,0 +1,118 @@ +/* + * 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 { getAstAndSyntaxErrors } from '../../ast_parser'; +import { CommandVisitorContext, WhereCommandVisitorContext } from '../contexts'; +import { Visitor } from '../visitor'; + +test('can collect all command names in type safe way', () => { + const visitor = new Visitor() + .on('visitCommand', (ctx) => { + return ctx.node.name; + }) + .on('visitQuery', (ctx) => { + const cmds = []; + for (const cmd of ctx.visitCommands()) { + cmds.push(cmd); + } + return cmds; + }); + + const { ast } = getAstAndSyntaxErrors('FROM index | LIMIT 123'); + const res = visitor.visitQuery(ast); + + expect(res).toEqual(['from', 'limit']); +}); + +test('can pass inputs to visitors', () => { + const visitor = new Visitor() + .on('visitCommand', (ctx, prefix: string) => { + return prefix + ctx.node.name; + }) + .on('visitQuery', (ctx) => { + const cmds = []; + for (const cmd of ctx.visitCommands('pfx:')) { + cmds.push(cmd); + } + return cmds; + }); + + const { ast } = getAstAndSyntaxErrors('FROM index | LIMIT 123'); + const res = visitor.visitQuery(ast); + + expect(res).toEqual(['pfx:from', 'pfx:limit']); +}); + +test('can specify specific visitors for commands', () => { + const { ast } = getAstAndSyntaxErrors( + 'FROM index | SORT asfd | WHERE 1 | ENRICH adsf | LIMIT 123' + ); + const res = new Visitor() + .on('visitWhereCommand', () => 'where') + .on('visitSortCommand', () => 'sort') + .on('visitEnrichCommand', () => 'very rich') + .on('visitCommand', () => 'DEFAULT') + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(ast); + + expect(res).toEqual(['DEFAULT', 'sort', 'where', 'very rich', 'DEFAULT']); +}); + +test('a command can access parent query node', () => { + const { ast } = getAstAndSyntaxErrors( + 'FROM index | SORT asfd | WHERE 1 | ENRICH adsf | LIMIT 123' + ); + new Visitor() + .on('visitWhereCommand', (ctx) => { + if (ctx.parent!.node !== ast) { + throw new Error('Expected parent to be query node'); + } + }) + .on('visitCommand', (ctx) => { + if (ctx.parent!.node !== ast) { + throw new Error('Expected parent to be query node'); + } + }) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(ast); +}); + +test('specific commands receive specific visitor contexts', () => { + const { ast } = getAstAndSyntaxErrors( + 'FROM index | SORT asfd | WHERE 1 | ENRICH adsf | LIMIT 123' + ); + + new Visitor() + .on('visitWhereCommand', (ctx) => { + if (!(ctx instanceof WhereCommandVisitorContext)) { + throw new Error('Expected WhereCommandVisitorContext'); + } + if (!(ctx instanceof CommandVisitorContext)) { + throw new Error('Expected WhereCommandVisitorContext'); + } + }) + .on('visitCommand', (ctx) => { + if (!(ctx instanceof CommandVisitorContext)) { + throw new Error('Expected CommandVisitorContext'); + } + }) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(ast); + + new Visitor() + .on('visitCommand', (ctx) => { + if (!(ctx instanceof CommandVisitorContext)) { + throw new Error('Expected CommandVisitorContext'); + } + if (ctx instanceof WhereCommandVisitorContext) { + throw new Error('Did not expect WhereCommandVisitorContext'); + } + }) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(ast); +}); diff --git a/packages/kbn-esql-ast/src/visitor/contexts.ts b/packages/kbn-esql-ast/src/visitor/contexts.ts new file mode 100644 index 0000000000000..a7920358e1bab --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/contexts.ts @@ -0,0 +1,443 @@ +/* + * 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 */ +// Splitting classes across files runs into issues with circular dependencies +// and makes it harder to understand the code structure. + +import { type GlobalVisitorContext, SharedData } from './global_visitor_context'; +import { firstItem, singleItems } from './utils'; +import type { + ESQLAstCommand, + ESQLAstItem, + ESQLAstNodeWithArgs, + ESQLColumn, + ESQLCommandOption, + ESQLDecimalLiteral, + ESQLFunction, + ESQLInlineCast, + ESQLIntegerLiteral, + ESQLList, + ESQLLiteral, + ESQLSource, + ESQLTimeInterval, +} from '../types'; +import type { + CommandVisitorInput, + ESQLAstExpressionNode, + ESQLAstQueryNode, + ExpressionVisitorInput, + ExpressionVisitorOutput, + UndefinedToVoid, + VisitorAstNode, + VisitorMethods, +} from './types'; +import { Builder } from '../builder'; + +const isNodeWithArgs = (x: unknown): x is ESQLAstNodeWithArgs => + !!x && typeof x === 'object' && Array.isArray((x as any).args); + +export class VisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData, + Node extends VisitorAstNode = VisitorAstNode +> { + constructor( + /** + * Global visitor context. + */ + public readonly ctx: GlobalVisitorContext, + + /** + * ES|QL AST node which is currently being visited. + */ + public readonly node: Node, + + /** + * Context of the parent node, from which the current node was reached + * during the AST traversal. + */ + public readonly parent: VisitorContext | null = null + ) {} + + public *visitArguments( + input: ExpressionVisitorInput + ): Iterable> { + this.ctx.assertMethodExists('visitExpression'); + + const node = this.node; + + if (!isNodeWithArgs(node)) { + throw new Error('Node does not have arguments'); + } + + for (const arg of singleItems(node.args)) { + yield this.visitExpression(arg, input as any); + } + } + + public visitExpression( + expressionNode: ESQLAstExpressionNode, + input: ExpressionVisitorInput + ): ExpressionVisitorOutput { + return this.ctx.visitExpression(this, expressionNode, input); + } + + public visitCommand( + commandNode: ESQLAstCommand, + input: CommandVisitorInput + ): ExpressionVisitorOutput { + return this.ctx.visitCommand(this, commandNode, input); + } +} + +export class QueryVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends VisitorContext { + public *visitCommands( + input: UndefinedToVoid>[1]> + ): Iterable< + | ReturnType> + | ReturnType> + > { + this.ctx.assertMethodExists('visitCommand'); + + for (const cmd of this.node) { + yield this.visitCommand(cmd, input as any); + } + } +} + +// Commands -------------------------------------------------------------------- + +export class CommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData, + Node extends ESQLAstCommand = ESQLAstCommand +> extends VisitorContext { + public name(): string { + return this.node.name.toUpperCase(); + } + + public *options(): Iterable { + for (const arg of this.node.args) { + if (Array.isArray(arg)) { + continue; + } + if (arg.type === 'option') { + yield arg; + } + } + } + + public *visitOptions( + input: UndefinedToVoid>[1]> + ): Iterable>> { + this.ctx.assertMethodExists('visitCommandOption'); + + for (const option of this.options()) { + const sourceContext = new CommandOptionVisitorContext(this.ctx, option, this); + const result = this.ctx.methods.visitCommandOption!(sourceContext, input); + + yield result; + } + } + + public *arguments(option: '' | string = ''): Iterable { + option = option.toLowerCase(); + + if (!option) { + for (const arg of this.node.args) { + if (Array.isArray(arg)) { + yield arg; + continue; + } + if (arg.type !== 'option') { + yield arg; + } + } + } + + const optionNode = this.node.args.find( + (arg) => !Array.isArray(arg) && arg.type === 'option' && arg.name === option + ); + + if (optionNode) { + yield* (optionNode as ESQLCommandOption).args; + } + } + + public *visitArguments( + input: ExpressionVisitorInput, + option: '' | string = '' + ): Iterable> { + this.ctx.assertMethodExists('visitExpression'); + + const node = this.node; + + if (!isNodeWithArgs(node)) { + throw new Error('Node does not have arguments'); + } + + for (const arg of singleItems(this.arguments(option))) { + yield this.visitExpression(arg, input as any); + } + } + + public *visitSources( + input: UndefinedToVoid>[1]> + ): Iterable>> { + this.ctx.assertMethodExists('visitSourceExpression'); + + for (const arg of singleItems(this.node.args)) { + if (arg.type === 'source') { + const sourceContext = new SourceExpressionVisitorContext(this.ctx, arg, this); + const result = this.ctx.methods.visitSourceExpression!(sourceContext, input); + + yield result; + } + } + } +} + +export class CommandOptionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends VisitorContext {} + +// FROM [ METADATA ] +export class FromCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext { + /** + * Visit the METADATA part of the FROM command. + * + * FROM [ METADATA ] + * + * @param input Input object to pass to all "visitColumn" children methods. + * @returns An iterable of results of all the "visitColumn" visitor methods. + */ + public *visitMetadataColumns( + input: UndefinedToVoid>[1]> + ): Iterable>> { + this.ctx.assertMethodExists('visitColumnExpression'); + + let metadataOption: ESQLCommandOption | undefined; + + for (const arg of singleItems(this.node.args)) { + if (arg.type === 'option' && arg.name === 'metadata') { + metadataOption = arg; + break; + } + } + + if (!metadataOption) { + return; + } + + for (const arg of singleItems(metadataOption.args)) { + if (arg.type === 'column') { + const columnContext = new ColumnExpressionVisitorContext(this.ctx, arg, this); + const result = this.ctx.methods.visitColumnExpression!(columnContext, input); + + yield result; + } + } + } +} + +// LIMIT +export class LimitCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext { + /** + * @returns The first numeric literal argument of the command. + */ + public numericLiteral(): ESQLIntegerLiteral | ESQLDecimalLiteral | undefined { + const arg = firstItem(this.node.args); + + if ( + arg && + arg.type === 'literal' && + (arg.literalType === 'integer' || arg.literalType === 'decimal') + ) { + return arg; + } + } + + /** + * @returns The value of the first numeric literal argument of the command. + */ + public numeric(): number | undefined { + const literal = this.numericLiteral(); + + return literal?.value; + } + + public setLimit(value: number): void { + const literalNode = Builder.numericLiteral({ value }); + + this.node.args = [literalNode]; + } +} + +// EXPLAIN +export class ExplainCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// ROW +export class RowCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// METRICS +export class MetricsCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// SHOW +export class ShowCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// META +export class MetaCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// EVAL +export class EvalCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// STATS [ BY ] +export class StatsCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// INLINESTATS [ BY ] +export class InlineStatsCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// LOOKUP ON +export class LookupCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// KEEP +export class KeepCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// SORT +export class SortCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// WHERE +export class WhereCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// DROP +export class DropCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// RENAME AS +export class RenameCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// DISSECT [ APPEND_SEPARATOR = ] +export class DissectCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// GROK +export class GrokCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// ENRICH [ ON ] [ WITH ] +export class EnrichCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// MV_EXPAND +export class MvExpandCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + +// Expressions ----------------------------------------------------------------- + +export class ExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData, + Node extends ESQLAstExpressionNode = ESQLAstExpressionNode +> extends VisitorContext {} + +export class ColumnExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends VisitorContext {} + +export class SourceExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends VisitorContext {} + +export class FunctionCallExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends VisitorContext {} + +export class LiteralExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData, + Node extends ESQLLiteral = ESQLLiteral +> extends ExpressionVisitorContext {} + +export class ListLiteralExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData, + Node extends ESQLList = ESQLList +> extends ExpressionVisitorContext {} + +export class TimeIntervalLiteralExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends ExpressionVisitorContext {} + +export class InlineCastExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends ExpressionVisitorContext {} diff --git a/packages/kbn-esql-ast/src/visitor/global_visitor_context.ts b/packages/kbn-esql-ast/src/visitor/global_visitor_context.ts new file mode 100644 index 0000000000000..9cae41f36dde5 --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/global_visitor_context.ts @@ -0,0 +1,468 @@ +/* + * 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 contexts from './contexts'; +import type { + ESQLAstCommand, + ESQLColumn, + ESQLFunction, + ESQLInlineCast, + ESQLList, + ESQLLiteral, + ESQLSource, + ESQLTimeInterval, +} from '../types'; +import type * as types from './types'; + +export type SharedData = Record; + +/** + * Global shared visitor context available to all visitors when visiting the AST. + * It contains the shared data, which can be accessed and modified by all visitors. + */ +export class GlobalVisitorContext< + Methods extends types.VisitorMethods = types.VisitorMethods, + Data extends SharedData = SharedData +> { + constructor( + /** + * Visitor methods, used internally by the visitor to traverse the AST. + * @protected + */ + public readonly methods: Methods, + + /** + * Shared data, which can be accessed and modified by all visitors. + */ + public data: Data + ) {} + + public assertMethodExists(name: K) { + if (!this.methods[name]) { + throw new Error(`${name}() method is not defined`); + } + } + + private visitWithSpecificContext< + Method extends keyof types.VisitorMethods, + Context extends contexts.VisitorContext + >( + method: Method, + context: Context, + input: types.VisitorInput + ): types.VisitorOutput { + this.assertMethodExists(method); + return this.methods[method]!(context as any, input); + } + + // Command visiting ---------------------------------------------------------- + + public visitCommandGeneric( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + this.assertMethodExists('visitCommand'); + + const context = new contexts.CommandVisitorContext(this, node, parent); + const output = this.methods.visitCommand!(context, input); + + return output; + } + + public visitCommand( + parent: contexts.VisitorContext | null, + commandNode: ESQLAstCommand, + input: types.CommandVisitorInput + ): types.CommandVisitorOutput { + switch (commandNode.name) { + case 'from': { + if (!this.methods.visitFromCommand) break; + return this.visitFromCommand(parent, commandNode, input as any); + } + case 'limit': { + if (!this.methods.visitLimitCommand) break; + return this.visitLimitCommand(parent, commandNode, input as any); + } + case 'explain': { + if (!this.methods.visitExplainCommand) break; + return this.visitExplainCommand(parent, commandNode, input as any); + } + case 'row': { + if (!this.methods.visitRowCommand) break; + return this.visitRowCommand(parent, commandNode, input as any); + } + // TODO: uncomment this when the command is implemented + // case 'metrics': { + // if (!this.methods.visitMetricsCommand) break; + // return this.visitMetricsCommand(parent, commandNode, input as any); + // } + case 'show': { + if (!this.methods.visitShowCommand) break; + return this.visitShowCommand(parent, commandNode, input as any); + } + case 'meta': { + if (!this.methods.visitMetaCommand) break; + return this.visitMetaCommand(parent, commandNode, input as any); + } + case 'eval': { + if (!this.methods.visitEvalCommand) break; + return this.visitEvalCommand(parent, commandNode, input as any); + } + case 'stats': { + if (!this.methods.visitStatsCommand) break; + return this.visitStatsCommand(parent, commandNode, input as any); + } + // TODO: uncomment this when the command is implemented + // case 'inline_stats': { + // if (!this.methods.visitInlineStatsCommand) break; + // return this.visitInlineStatsCommand(parent, commandNode, input as any); + // } + case 'lookup': { + if (!this.methods.visitLookupCommand) break; + return this.visitLookupCommand(parent, commandNode, input as any); + } + case 'keep': { + if (!this.methods.visitKeepCommand) break; + return this.visitKeepCommand(parent, commandNode, input as any); + } + case 'sort': { + if (!this.methods.visitSortCommand) break; + return this.visitSortCommand(parent, commandNode, input as any); + } + case 'where': { + if (!this.methods.visitWhereCommand) break; + return this.visitWhereCommand(parent, commandNode, input as any); + } + case 'drop': { + if (!this.methods.visitDropCommand) break; + return this.visitDropCommand(parent, commandNode, input as any); + } + case 'rename': { + if (!this.methods.visitRenameCommand) break; + return this.visitRenameCommand(parent, commandNode, input as any); + } + case 'dissect': { + if (!this.methods.visitDissectCommand) break; + return this.visitDissectCommand(parent, commandNode, input as any); + } + case 'grok': { + if (!this.methods.visitGrokCommand) break; + return this.visitGrokCommand(parent, commandNode, input as any); + } + case 'enrich': { + if (!this.methods.visitEnrichCommand) break; + return this.visitEnrichCommand(parent, commandNode, input as any); + } + case 'mv_expand': { + if (!this.methods.visitMvExpandCommand) break; + return this.visitMvExpandCommand(parent, commandNode, input as any); + } + } + return this.visitCommandGeneric(parent, commandNode, input as any); + } + + public visitFromCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.FromCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitFromCommand', context, input); + } + + public visitLimitCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.LimitCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitLimitCommand', context, input); + } + + public visitExplainCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.ExplainCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitExplainCommand', context, input); + } + + public visitRowCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.RowCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitRowCommand', context, input); + } + + public visitMetricsCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.MetricsCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitMetricsCommand', context, input); + } + + public visitShowCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.ShowCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitShowCommand', context, input); + } + + public visitMetaCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.MetaCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitMetaCommand', context, input); + } + + public visitEvalCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.EvalCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitEvalCommand', context, input); + } + + public visitStatsCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.StatsCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitStatsCommand', context, input); + } + + public visitInlineStatsCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.InlineStatsCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitInlineStatsCommand', context, input); + } + + public visitLookupCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.LookupCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitLookupCommand', context, input); + } + + public visitKeepCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.KeepCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitKeepCommand', context, input); + } + + public visitSortCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.SortCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitSortCommand', context, input); + } + + public visitWhereCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.WhereCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitWhereCommand', context, input); + } + + public visitDropCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.DropCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitDropCommand', context, input); + } + + public visitRenameCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.RenameCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitRenameCommand', context, input); + } + + public visitDissectCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.DissectCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitDissectCommand', context, input); + } + + public visitGrokCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.GrokCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitGrokCommand', context, input); + } + + public visitEnrichCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.EnrichCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitEnrichCommand', context, input); + } + + public visitMvExpandCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.MvExpandCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitMvExpandCommand', context, input); + } + + // Expression visiting ------------------------------------------------------- + + public visitExpressionGeneric( + parent: contexts.VisitorContext | null, + node: types.ESQLAstExpressionNode, + input: types.VisitorInput + ): types.VisitorOutput { + this.assertMethodExists('visitExpression'); + + const context = new contexts.ExpressionVisitorContext(this, node, parent); + const output = this.methods.visitExpression!(context, input); + + return output; + } + + public visitExpression( + parent: contexts.VisitorContext | null, + expressionNode: types.ESQLAstExpressionNode, + input: types.ExpressionVisitorInput + ): types.ExpressionVisitorOutput { + if (Array.isArray(expressionNode)) { + throw new Error('should not happen'); + } + switch (expressionNode.type) { + case 'column': { + if (!this.methods.visitColumnExpression) break; + return this.visitColumnExpression(parent, expressionNode, input as any); + } + case 'source': { + if (!this.methods.visitSourceExpression) break; + return this.visitSourceExpression(parent, expressionNode, input as any); + } + case 'function': { + if (!this.methods.visitFunctionCallExpression) break; + return this.visitFunctionCallExpression(parent, expressionNode, input as any); + } + case 'literal': { + if (!this.methods.visitLiteralExpression) break; + return this.visitLiteralExpression(parent, expressionNode, input as any); + } + case 'list': { + if (!this.methods.visitListLiteralExpression) break; + return this.visitListLiteralExpression(parent, expressionNode, input as any); + } + case 'timeInterval': { + if (!this.methods.visitTimeIntervalLiteralExpression) break; + return this.visitTimeIntervalLiteralExpression(parent, expressionNode, input as any); + } + case 'inlineCast': { + if (!this.methods.visitInlineCastExpression) break; + return this.visitInlineCastExpression(parent, expressionNode, input as any); + } + } + return this.visitExpressionGeneric(parent, expressionNode, input as any); + } + + public visitColumnExpression( + parent: contexts.VisitorContext | null, + node: ESQLColumn, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.ColumnExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitColumnExpression', context, input); + } + + public visitSourceExpression( + parent: contexts.VisitorContext | null, + node: ESQLSource, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.SourceExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitSourceExpression', context, input); + } + + public visitFunctionCallExpression( + parent: contexts.VisitorContext | null, + node: ESQLFunction, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.FunctionCallExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitFunctionCallExpression', context, input); + } + + public visitLiteralExpression( + parent: contexts.VisitorContext | null, + node: ESQLLiteral, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.LiteralExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitLiteralExpression', context, input); + } + + public visitListLiteralExpression( + parent: contexts.VisitorContext | null, + node: ESQLList, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.ListLiteralExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitListLiteralExpression', context, input); + } + + public visitTimeIntervalLiteralExpression( + parent: contexts.VisitorContext | null, + node: ESQLTimeInterval, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.TimeIntervalLiteralExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitTimeIntervalLiteralExpression', context, input); + } + + public visitInlineCastExpression( + parent: contexts.VisitorContext | null, + node: ESQLInlineCast, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.InlineCastExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitInlineCastExpression', context, input); + } +} diff --git a/packages/kbn-esql-ast/src/visitor/index.ts b/packages/kbn-esql-ast/src/visitor/index.ts new file mode 100644 index 0000000000000..9e46616a50002 --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { Visitor, type VisitorOptions } from './visitor'; +export { GlobalVisitorContext, type SharedData } from './global_visitor_context'; +export * from './contexts'; diff --git a/packages/kbn-esql-ast/src/visitor/types.ts b/packages/kbn-esql-ast/src/visitor/types.ts new file mode 100644 index 0000000000000..a8ec5e9bd1785 --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/types.ts @@ -0,0 +1,256 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { SharedData } from './global_visitor_context'; +import type * as ast from '../types'; +import type * as contexts from './contexts'; + +/** + * We don't have a dedicated "query" AST node, so - for now - we use the root + * array of commands as the "query" node. + */ +export type ESQLAstQueryNode = ast.ESQLAst; + +/** + * Represents an "expression" node in the AST. + */ +// export type ESQLAstExpressionNode = ESQLAstItem; +export type ESQLAstExpressionNode = ast.ESQLSingleAstItem; + +/** + * All possible AST nodes supported by the visitor. + */ +export type VisitorAstNode = ESQLAstQueryNode | ast.ESQLAstNode; + +export type Visitor = ( + ctx: Ctx, + input: Input +) => Output; + +/** + * Retrieves the `Input` of a {@link Visitor} function. + */ +export type VisitorInput< + Methods extends VisitorMethods, + Method extends keyof Methods +> = UndefinedToVoid>>[1]>; + +/** + * Retrieves the `Output` of a {@link Visitor} function. + */ +export type VisitorOutput< + Methods extends VisitorMethods, + Method extends keyof Methods +> = ReturnType>>; + +/** + * Input that satisfies any expression visitor input constraints. + */ +export type ExpressionVisitorInput = AnyToVoid< + | VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput +>; + +/** + * Input that satisfies any expression visitor output constraints. + */ +export type ExpressionVisitorOutput = + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput; + +/** + * Input that satisfies any command visitor input constraints. + */ +export type CommandVisitorInput = AnyToVoid< + | VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput & + VisitorInput +>; + +/** + * Input that satisfies any command visitor output constraints. + */ +export type CommandVisitorOutput = + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput + | VisitorOutput; + +export interface VisitorMethods< + Visitors extends VisitorMethods = any, + Data extends SharedData = SharedData +> { + visitQuery?: Visitor, any, any>; + visitCommand?: Visitor, any, any>; + visitFromCommand?: Visitor, any, any>; + visitLimitCommand?: Visitor, any, any>; + visitExplainCommand?: Visitor, any, any>; + visitRowCommand?: Visitor, any, any>; + visitMetricsCommand?: Visitor, any, any>; + visitShowCommand?: Visitor, any, any>; + visitMetaCommand?: Visitor, any, any>; + visitEvalCommand?: Visitor, any, any>; + visitStatsCommand?: Visitor, any, any>; + visitInlineStatsCommand?: Visitor< + contexts.InlineStatsCommandVisitorContext, + any, + any + >; + visitLookupCommand?: Visitor, any, any>; + visitKeepCommand?: Visitor, any, any>; + visitSortCommand?: Visitor, any, any>; + visitWhereCommand?: Visitor, any, any>; + visitDropCommand?: Visitor, any, any>; + visitRenameCommand?: Visitor, any, any>; + visitDissectCommand?: Visitor, any, any>; + visitGrokCommand?: Visitor, any, any>; + visitEnrichCommand?: Visitor, any, any>; + visitMvExpandCommand?: Visitor, any, any>; + visitCommandOption?: Visitor, any, any>; + visitExpression?: Visitor, any, any>; + visitSourceExpression?: Visitor< + contexts.SourceExpressionVisitorContext, + any, + any + >; + visitColumnExpression?: Visitor< + contexts.ColumnExpressionVisitorContext, + any, + any + >; + visitFunctionCallExpression?: Visitor< + contexts.FunctionCallExpressionVisitorContext, + any, + any + >; + visitLiteralExpression?: Visitor< + contexts.LiteralExpressionVisitorContext, + any, + any + >; + visitListLiteralExpression?: Visitor< + contexts.ListLiteralExpressionVisitorContext, + any, + any + >; + visitTimeIntervalLiteralExpression?: Visitor< + contexts.TimeIntervalLiteralExpressionVisitorContext, + any, + any + >; + visitInlineCastExpression?: Visitor< + contexts.InlineCastExpressionVisitorContext, + any, + any + >; +} + +/** + * Maps any AST node to the corresponding visitor context. + */ +export type AstNodeToVisitorName = Node extends ESQLAstQueryNode + ? 'visitQuery' + : Node extends ast.ESQLCommand + ? 'visitCommand' + : Node extends ast.ESQLCommandOption + ? 'visitCommandOption' + : Node extends ast.ESQLSource + ? 'visitSourceExpression' + : Node extends ast.ESQLColumn + ? 'visitColumnExpression' + : Node extends ast.ESQLFunction + ? 'visitFunctionCallExpression' + : Node extends ast.ESQLLiteral + ? 'visitLiteralExpression' + : Node extends ast.ESQLList + ? 'visitListLiteralExpression' + : Node extends ast.ESQLTimeInterval + ? 'visitTimeIntervalLiteralExpression' + : Node extends ast.ESQLInlineCast + ? 'visitInlineCastExpression' + : never; + +/** + * Maps any AST node to the corresponding visitor context. + */ +export type AstNodeToVisitor< + Node extends VisitorAstNode, + Methods extends VisitorMethods = VisitorMethods +> = Methods[AstNodeToVisitorName]; + +/** + * Maps any AST node to its corresponding visitor context. + */ +export type AstNodeToContext< + Node extends VisitorAstNode, + Methods extends VisitorMethods = VisitorMethods +> = Parameters>>[0]; + +/** + * Asserts that a type is a function. + */ +export type EnsureFunction = T extends (...args: any[]) => any ? T : never; + +/** + * Converts `undefined` to `void`. This allows to make optional a function + * parameter or the return value. + */ +export type UndefinedToVoid = T extends undefined ? void : T; + +/** Returns `Y` if `T` is `any`, or `N` otherwise. */ +export type IfAny = 0 extends 1 & T ? Y : N; + +/** Converts `any` type to `void`. */ +export type AnyToVoid = IfAny; diff --git a/packages/kbn-esql-ast/src/visitor/utils.ts b/packages/kbn-esql-ast/src/visitor/utils.ts new file mode 100644 index 0000000000000..d79cc6fd5ed1a --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/utils.ts @@ -0,0 +1,36 @@ +/* + * 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 { ESQLAstItem, ESQLSingleAstItem } from '../types'; + +/** + * Normalizes AST "item" list to only contain *single* items. + * + * @param items A list of single or nested items. + */ +export function* singleItems(items: Iterable): Iterable { + for (const item of items) { + if (Array.isArray(item)) { + yield* singleItems(item); + } else { + yield item; + } + } +} + +/** + * Returns the first normalized "single item" from the "item" list. + * + * @param items Returns the first "single item" from the "item" list. + * @returns A "single item", if any. + */ +export const firstItem = (items: ESQLAstItem[]): ESQLSingleAstItem | undefined => { + for (const item of singleItems(items)) { + return item; + } +}; diff --git a/packages/kbn-esql-ast/src/visitor/visitor.ts b/packages/kbn-esql-ast/src/visitor/visitor.ts new file mode 100644 index 0000000000000..3956fe126723e --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/visitor.ts @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { GlobalVisitorContext, SharedData } from './global_visitor_context'; +import { QueryVisitorContext } from './contexts'; +import { VisitorContext } from './contexts'; +import type { + AstNodeToVisitorName, + EnsureFunction, + ESQLAstQueryNode, + UndefinedToVoid, + VisitorMethods, +} from './types'; + +export interface VisitorOptions< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> { + visitors?: Methods; + data?: Data; +} + +export class Visitor< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> { + public readonly ctx: GlobalVisitorContext; + + constructor(protected readonly options: VisitorOptions = {}) { + this.ctx = new GlobalVisitorContext( + options.visitors ?? ({} as Methods), + options.data ?? ({} as Data) + ); + } + + public visitors>( + visitors: NewMethods + ): Visitor { + Object.assign(this.ctx.methods, visitors); + return this as any; + } + + public on< + K extends keyof VisitorMethods, + F extends VisitorMethods[K] + >(visitor: K, fn: F): Visitor { + (this.ctx.methods as any)[visitor] = fn; + return this as any; + } + + /** + * Traverse any AST node given any visitor context. + * + * @param node AST node to traverse. + * @param ctx Traversal context. + * @returns Result of the visitor callback. + */ + public visit>( + ctx: Ctx, + input: UndefinedToVoid]>>[1]> + ): ReturnType]>> { + const node = ctx.node; + if (node instanceof Array) { + this.ctx.assertMethodExists('visitQuery'); + return this.ctx.methods.visitQuery!(ctx as any, input) as ReturnType< + NonNullable + >; + } else if (node && typeof node === 'object') { + switch (node.type) { + case 'command': + this.ctx.assertMethodExists('visitCommand'); + return this.ctx.methods.visitCommand!(ctx as any, input) as ReturnType< + NonNullable + >; + } + } + throw new Error(`Unsupported node type: ${typeof node}`); + } + + /** + * Traverse the root node of ES|QL query with default context. + * + * @param node Query node to traverse. + * @returns The result of the query visitor. + */ + public visitQuery( + node: ESQLAstQueryNode, + input: UndefinedToVoid>[1]> + ) { + const queryContext = new QueryVisitorContext(this.ctx, node, null); + return this.visit(queryContext, input); + } +} diff --git a/packages/kbn-esql-ast/src/walker/walker.test.ts b/packages/kbn-esql-ast/src/walker/walker.test.ts index 2bc666a1e0421..9f62c2f07d200 100644 --- a/packages/kbn-esql-ast/src/walker/walker.test.ts +++ b/packages/kbn-esql-ast/src/walker/walker.test.ts @@ -211,7 +211,7 @@ describe('structurally can walk all nodes', () => { expect(columns).toMatchObject([ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '123', }, { @@ -244,7 +244,7 @@ describe('structurally can walk all nodes', () => { expect(columns).toMatchObject([ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { @@ -264,7 +264,7 @@ describe('structurally can walk all nodes', () => { }, { type: 'literal', - literalType: 'number', + literalType: 'decimal', name: '3.14', }, ]); @@ -288,12 +288,12 @@ describe('structurally can walk all nodes', () => { values: [ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '2', }, ], @@ -318,12 +318,12 @@ describe('structurally can walk all nodes', () => { values: [ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '2', }, ], @@ -333,7 +333,7 @@ describe('structurally can walk all nodes', () => { values: [ { type: 'literal', - literalType: 'number', + literalType: 'decimal', name: '3.3', }, ], @@ -342,17 +342,17 @@ describe('structurally can walk all nodes', () => { expect(literals).toMatchObject([ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '2', }, { type: 'literal', - literalType: 'number', + literalType: 'decimal', name: '3.3', }, ]); @@ -511,7 +511,7 @@ describe('structurally can walk all nodes', () => { describe('cast expression', () => { test('can visit cast expression', () => { - const query = 'FROM index | STATS a = 123::number'; + const query = 'FROM index | STATS a = 123::integer'; const { ast } = getAstAndSyntaxErrors(query); const casts: ESQLInlineCast[] = []; @@ -523,10 +523,10 @@ describe('structurally can walk all nodes', () => { expect(casts).toMatchObject([ { type: 'inlineCast', - castType: 'number', + castType: 'integer', value: { type: 'literal', - literalType: 'number', + literalType: 'integer', value: 123, }, }, diff --git a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts index 45aac1344725d..26d3b1c0c4a89 100644 --- a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts +++ b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts @@ -5,11 +5,98 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - +import type { DataView } from '@kbn/data-views-plugin/public'; import { getInitialESQLQuery } from './get_initial_esql_query'; +const getDataView = (name: string, dataViewFields: DataView['fields'], timeFieldName?: string) => { + dataViewFields.getByName = (fieldName: string) => { + return dataViewFields.find((field) => field.name === fieldName); + }; + return { + id: `${name}-id`, + title: name, + metaFields: ['_index', '_score'], + fields: dataViewFields, + type: 'default', + getName: () => name, + getIndexPattern: () => name, + getFieldByName: jest.fn((fieldName: string) => dataViewFields.getByName(fieldName)), + timeFieldName, + isPersisted: () => true, + toSpec: () => ({}), + toMinimalSpec: () => ({}), + } as unknown as DataView; +}; + describe('getInitialESQLQuery', () => { - it('should work correctly', () => { - expect(getInitialESQLQuery('logs*')).toBe('FROM logs* | LIMIT 10'); + it('should NOT add the where clause if there is @timestamp in the index', () => { + const fields = [ + { + name: '@timestamp', + displayName: '@timestamp', + type: 'date', + scripted: false, + filterable: true, + aggregatable: true, + sortable: true, + }, + { + name: 'message', + displayName: 'message', + type: 'string', + scripted: false, + filterable: false, + }, + ] as DataView['fields']; + const dataView = getDataView('logs*', fields, '@timestamp'); + expect(getInitialESQLQuery(dataView)).toBe('FROM logs* | LIMIT 10'); + }); + + it('should NOT add the where clause if there is @timestamp in the index although the dataview timefielName is different', () => { + const fields = [ + { + name: '@timestamp', + displayName: '@timestamp', + type: 'date', + scripted: false, + filterable: true, + aggregatable: true, + sortable: true, + }, + { + name: 'message', + displayName: 'message', + type: 'string', + scripted: false, + filterable: false, + }, + ] as DataView['fields']; + const dataView = getDataView('logs*', fields, 'timestamp'); + expect(getInitialESQLQuery(dataView)).toBe('FROM logs* | LIMIT 10'); + }); + + it('should append a where clause correctly if there is no @timestamp in the index fields', () => { + const fields = [ + { + name: '@custom_timestamp', + displayName: '@custom_timestamp', + type: 'date', + scripted: false, + filterable: true, + aggregatable: true, + sortable: true, + }, + { + name: 'message', + displayName: 'message', + type: 'string', + scripted: false, + filterable: false, + }, + ] as DataView['fields']; + const dataView = getDataView('logs*', fields, '@custom_timestamp'); + expect(getInitialESQLQuery(dataView)).toBe( + 'FROM logs* | WHERE @custom_timestamp >= ?start AND @custom_timestamp <= ?end | LIMIT 10' + ); }); }); diff --git a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts index 302f3c364f1a6..1d78432b14269 100644 --- a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts +++ b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts @@ -5,11 +5,20 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ +import type { DataView } from '@kbn/data-views-plugin/public'; /** - * Builds an ES|QL query for the provided index or index pattern - * @param indexOrIndexPattern + * Builds an ES|QL query for the provided dataView + * If there is @timestamp field in the index, we don't add the WHERE clause + * If there is no @timestamp and there is a dataView timeFieldName, we add the WHERE clause with the timeFieldName + * @param dataView */ -export function getInitialESQLQuery(indexOrIndexPattern: string): string { - return `FROM ${indexOrIndexPattern} | LIMIT 10`; +export function getInitialESQLQuery(dataView: DataView): string { + const hasAtTimestampField = dataView?.fields?.getByName?.('@timestamp')?.type === 'date'; + const timeFieldName = dataView?.timeFieldName; + const filterByTimeParams = + !hasAtTimestampField && timeFieldName + ? ` | WHERE ${timeFieldName} >= ?start AND ${timeFieldName} <= ?end` + : ''; + return `FROM ${dataView.getIndexPattern()}${filterByTimeParams} | LIMIT 10`; } diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts index aa92c7bd024d5..cbee9d00e8928 100644 --- a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts @@ -12,7 +12,6 @@ import { join } from 'path'; import _ from 'lodash'; import type { RecursivePartial } from '@kbn/utility-types'; import { FunctionDefinition } from '../src/definitions/types'; -import { esqlToKibanaType } from '../src/shared/esql_to_kibana_type'; const aliasTable: Record = { to_version: ['to_ver'], @@ -240,10 +239,10 @@ function getFunctionDefinition(ESFunctionDefinition: Record): Funct ...signature, params: signature.params.map((param: any) => ({ ...param, - type: esqlToKibanaType(param.type), + type: param.type, description: undefined, })), - returnType: esqlToKibanaType(signature.returnType), + returnType: signature.returnType, variadic: undefined, // we don't support variadic property minParams: signature.variadic ? signature.params.filter((param: any) => !param.optional).length diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts index 8d6394fe96af6..d3497115aecf9 100644 --- a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts @@ -25,6 +25,7 @@ import { } from '../src/definitions/types'; import { FUNCTION_DESCRIBE_BLOCK_NAME } from '../src/validation/function_describe_block_name'; import { getMaxMinNumberOfParams } from '../src/validation/helpers'; +import { ESQL_NUMBER_TYPES, isNumericType, isStringType } from '../src/shared/esql_types'; export const fieldNameFromType = (type: SupportedFieldType) => `${camelCase(type)}Field`; @@ -141,8 +142,8 @@ function generateImplicitDateCastingTestsForFunction( const allSignaturesWithDateParams = definition.signatures.filter((signature) => signature.params.some( (param, i) => - param.type === 'date' && - !definition.signatures.some((def) => getParamAtPosition(def, i)?.type === 'string') // don't count parameters that already accept a string + (param.type === 'date' || param.type === 'date_period') && + !definition.signatures.some((def) => isStringType(getParamAtPosition(def, i)?.type)) // don't count parameters that already accept a string ) ); @@ -300,8 +301,8 @@ function generateWhereCommandTestsForEvalFunction( // 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)) + [...ESQL_NUMBER_TYPES, 'string'].includes(returnType) && + params.every(({ type }) => [...ESQL_NUMBER_TYPES, 'string'].includes(type)) ); if (!supportedFunction) { @@ -311,12 +312,12 @@ function generateWhereCommandTestsForEvalFunction( 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) + [...ESQL_NUMBER_TYPES, 'string'].includes(returnType) ); for (const { params, returnType, ...restSign } of supportedSignatures) { const correctMapping = getFieldMapping(params); testCases.set( - `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ + `from a_index | where ${!isNumericType(returnType) ? 'length(' : ''}${ // hijacking a bit this function to produce a function call getFunctionSignatures( { @@ -326,7 +327,7 @@ function generateWhereCommandTestsForEvalFunction( }, { withTypes: false } )[0].declaration - }${returnType !== 'number' ? ')' : ''} > 0`, + }${!isNumericType(returnType) ? ')' : ''} > 0`, [] ); @@ -337,7 +338,7 @@ function generateWhereCommandTestsForEvalFunction( supportedTypesAndFieldNames ); testCases.set( - `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ + `from a_index | where ${!isNumericType(returnType) ? 'length(' : ''}${ // hijacking a bit this function to produce a function call getFunctionSignatures( { @@ -347,7 +348,7 @@ function generateWhereCommandTestsForEvalFunction( }, { withTypes: false } )[0].declaration - }${returnType !== 'number' ? ')' : ''} > 0`, + }${!isNumericType(returnType) ? ')' : ''} > 0`, expectedErrors ); } @@ -357,7 +358,7 @@ function generateWhereCommandTestsForAggFunction( { name, alias, signatures, ...defRest }: FunctionDefinition, testCases: Map ) { - // statsSignatures.some(({ returnType, params }) => ['number'].includes(returnType)) + // statsSignatures.some(({ returnType, params }) => [...ESQL_NUMBER_TYPES].includes(returnType)) for (const { params, ...signRest } of signatures) { const fieldMapping = getFieldMapping(params); @@ -542,7 +543,7 @@ function generateEvalCommandTestsForEvalFunction( signatureWithGreatestNumberOfParams.params ).concat({ name: 'extraArg', - type: 'number', + type: 'integer', }); // get the expected args from the first signature in case of errors @@ -660,7 +661,7 @@ function generateStatsCommandTestsForAggFunction( testCases.set(`from a_index | stats var = ${correctSignature}`, []); testCases.set(`from a_index | stats ${correctSignature}`, []); - if (signRest.returnType === 'number') { + if (isNumericType(signRest.returnType)) { testCases.set(`from a_index | stats var = round(${correctSignature})`, []); testCases.set(`from a_index | stats round(${correctSignature})`, []); testCases.set( @@ -713,8 +714,8 @@ function generateStatsCommandTestsForAggFunction( } // test only numeric functions for now - if (params[0].type === 'number') { - const nestedBuiltin = 'numberField / 2'; + if (isNumericType(params[0].type)) { + const nestedBuiltin = 'doubleField / 2'; const fieldMappingWithNestedBuiltinFunctions = getFieldMapping(params); fieldMappingWithNestedBuiltinFunctions[0].name = nestedBuiltin; @@ -726,16 +727,16 @@ function generateStatsCommandTestsForAggFunction( }, { withTypes: false } )[0].declaration; - // from a_index | STATS aggFn( numberField / 2 ) + // from a_index | STATS aggFn( doubleField / 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(doubleField), ${fnSignatureWithBuiltinString}`, []); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithBuiltinString}`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithBuiltinString}`, [] ); - const nestedEvalAndBuiltin = 'round(numberField / 2)'; + const nestedEvalAndBuiltin = 'round(doubleField / 2)'; const fieldMappingWithNestedEvalAndBuiltinFunctions = getFieldMapping(params); fieldMappingWithNestedBuiltinFunctions[0].name = nestedEvalAndBuiltin; @@ -747,18 +748,18 @@ function generateStatsCommandTestsForAggFunction( }, { withTypes: false } )[0].declaration; - // from a_index | STATS aggFn( round(numberField / 2) ) + // from a_index | STATS aggFn( round(doubleField / 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}`, + `from a_index | stats avg(doubleField), ${fnSignatureWithEvalAndBuiltinString}`, [] ); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString}`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithEvalAndBuiltinString}`, [] ); - // from a_index | STATS aggFn(round(numberField / 2) ) BY round(numberField / 2) + // from a_index | STATS aggFn(round(doubleField / 2) ) BY round(doubleField / 2) testCases.set( `from a_index | stats ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}`, [] @@ -768,19 +769,19 @@ function generateStatsCommandTestsForAggFunction( [] ); testCases.set( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ipField`, + `from a_index | stats avg(doubleField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ipField`, [] ); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ipField`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ipField`, [] ); testCases.set( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, + `from a_index | stats avg(doubleField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, [] ); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, [] ); } @@ -798,7 +799,7 @@ function generateStatsCommandTestsForAggFunction( .filter(({ constantOnly }) => !constantOnly) .map( (_) => - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]` + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(doubleField)] of type [double]` ); testCases.set( `from a_index | stats var = ${ @@ -965,9 +966,17 @@ function generateSortCommandTestsForAggFunction( const generateSortCommandTestsForGroupingFunction = generateSortCommandTestsForAggFunction; const fieldTypesToConstants: Record = { - string: '"a"', - number: '5', - date: 'now()', + text: '"a"', + keyword: '"a"', + double: '5.5', + integer: '5', + long: '5', + unsigned_long: '5', + counter_integer: '5', + counter_long: '5', + counter_double: '5.5', + date: 'to_datetime("2021-01-01T00:00:00Z")', + date_period: 'to_date_period("2021-01-01/2021-01-02")', boolean: 'true', version: 'to_version("1.0.0")', ip: 'to_ip("127.0.0.1")', @@ -1003,8 +1012,8 @@ function prepareNestedFunction(fnSignature: FunctionDefinition): string { } const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; - const toInteger = evalFunctionDefinitions.find(({ name }) => name === 'to_integer')!; +const toDoubleSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_double')!; const toStringSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_string')!; const toDateSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; const toBooleanSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; @@ -1019,10 +1028,12 @@ const toCartesianShapeSignature = evalFunctionDefinitions.find( )!; const toVersionSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_version')!; +// We don't have full list for long, unsigned_long, etc. const nestedFunctions: Record = { - number: prepareNestedFunction(toInteger), - string: prepareNestedFunction(toStringSignature), - date: prepareNestedFunction(toDateSignature), + double: prepareNestedFunction(toDoubleSignature), + integer: prepareNestedFunction(toInteger), + text: prepareNestedFunction(toStringSignature), + keyword: prepareNestedFunction(toStringSignature), boolean: prepareNestedFunction(toBooleanSignature), ip: prepareNestedFunction(toIpSignature), version: prepareNestedFunction(toVersionSignature), @@ -1030,6 +1041,8 @@ const nestedFunctions: Record = { geo_shape: prepareNestedFunction(toGeoShapeSignature), cartesian_point: prepareNestedFunction(toCartesianPointSignature), cartesian_shape: prepareNestedFunction(toCartesianShapeSignature), + // @ts-expect-error + datetime: prepareNestedFunction(toDateSignature), }; function getFieldName( @@ -1086,6 +1099,7 @@ function getFieldMapping( number: '5', date: 'now()', }; + return params.map(({ name: _name, type, constantOnly, literalOptions, ...rest }) => { const typeString: string = type; if (isSupportedFieldType(typeString)) { @@ -1124,7 +1138,7 @@ function getFieldMapping( ...rest, }; } - return { name: 'stringField', type, ...rest }; + return { name: 'textField', type, ...rest }; }); } @@ -1225,8 +1239,12 @@ function generateIncorrectlyTypedParameters( } const fieldName = wrongFieldMapping[i].name; if ( - fieldName === 'numberField' && - signatures.every((signature) => getParamAtPosition(signature, i)?.type !== 'string') + fieldName === 'doubleField' && + signatures.every( + (signature) => + getParamAtPosition(signature, i)?.type !== 'keyword' || + getParamAtPosition(signature, i)?.type !== 'text' + ) ) { return; } diff --git a/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts index f3c159247e260..5f24d86e718bc 100644 --- a/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts @@ -11,14 +11,14 @@ import { supportedFieldTypes } from '../definitions/types'; export const fields = [ ...supportedFieldTypes.map((type) => ({ name: `${camelCase(type)}Field`, type })), - { name: 'any#Char$Field', type: 'number' }, - { name: 'kubernetes.something.something', type: 'number' }, + { name: 'any#Char$Field', type: 'double' }, + { name: 'kubernetes.something.something', type: 'double' }, { name: '@timestamp', type: 'date' }, ]; export const enrichFields = [ - { name: 'otherField', type: 'string' }, - { name: 'yetAnotherField', type: 'number' }, + { name: 'otherField', type: 'text' }, + { name: 'yetAnotherField', type: 'double' }, ]; // eslint-disable-next-line @typescript-eslint/naming-convention @@ -58,7 +58,7 @@ export function getCallbackMocks() { return unsupported_field; } if (/dissect|grok/.test(query)) { - return [{ name: 'firstWord', type: 'string' }]; + return [{ name: 'firstWord', type: 'text' }]; } return fields; }), diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts index 7378760781d97..88fd654a83453 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts @@ -6,8 +6,11 @@ * Side Public License, v 1. */ +import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../../shared/esql_types'; import { setup, getFunctionSignaturesByReturnType, getFieldNamesByType } from './helpers'; +const ESQL_NUMERIC_TYPES = ESQL_NUMBER_TYPES as unknown as string[]; + const allAggFunctions = getFunctionSignaturesByReturnType('stats', 'any', { agg: true, }); @@ -74,51 +77,76 @@ describe('autocomplete.suggest', () => { const { assertSuggestions } = await setup(); await assertSuggestions('from a | stats by bucket(/', [ - ...getFieldNamesByType(['number', 'date']).map((field) => `${field},`), - ...getFunctionSignaturesByReturnType('eval', ['date', 'number'], { scalar: true }).map( - (s) => ({ ...s, text: `${s.text},` }) + ...getFieldNamesByType([...ESQL_COMMON_NUMERIC_TYPES, 'date']).map( + (field) => `${field},` ), + ...getFunctionSignaturesByReturnType('eval', ['date', ...ESQL_COMMON_NUMERIC_TYPES], { + scalar: true, + }).map((s) => ({ ...s, text: `${s.text},` })), ]); await assertSuggestions('from a | stats round(/', [ - ...getFunctionSignaturesByReturnType('stats', 'number', { agg: true, grouping: true }), - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFunctionSignaturesByReturnType('stats', ESQL_NUMERIC_TYPES, { + agg: true, + grouping: true, + }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); await assertSuggestions('from a | stats round(round(/', [ - ...getFunctionSignaturesByReturnType('stats', 'number', { agg: true }), - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFunctionSignaturesByReturnType('stats', ESQL_NUMERIC_TYPES, { agg: true }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); await assertSuggestions('from a | stats avg(round(/', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); await assertSuggestions('from a | stats avg(/', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_NUMERIC_TYPES, { scalar: true }), ]); await assertSuggestions('from a | stats round(avg(/', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); }); test('when typing inside function left paren', async () => { const { assertSuggestions } = await setup(); const expected = [ - ...getFieldNamesByType(['number', 'date', 'boolean', 'ip']), - ...getFunctionSignaturesByReturnType('stats', ['number', 'date', 'boolean', 'ip'], { - scalar: true, - }), + ...getFieldNamesByType([...ESQL_COMMON_NUMERIC_TYPES, 'date', 'boolean', 'ip']), + ...getFunctionSignaturesByReturnType( + 'stats', + [...ESQL_COMMON_NUMERIC_TYPES, 'date', 'boolean', 'ip'], + { + scalar: true, + } + ), ]; await assertSuggestions('from a | stats a=min(/)', expected); @@ -130,8 +158,14 @@ describe('autocomplete.suggest', () => { const { assertSuggestions } = await setup(); await assertSuggestions('from a | stats avg(b/) by stringField', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType('double'), + ...getFunctionSignaturesByReturnType( + 'eval', + ['double', 'integer', 'long', 'unsigned_long'], + { + scalar: true, + } + ), ]); }); @@ -205,10 +239,15 @@ describe('autocomplete.suggest', () => { test('on space before expression right hand side operand', async () => { const { assertSuggestions } = await setup(); - await assertSuggestions('from a | stats avg(b) by numberField % /', [ - ...getFieldNamesByType('number'), + await assertSuggestions('from a | stats avg(b) by integerField % /', [ + ...getFieldNamesByType('integer'), + ...getFieldNamesByType('double'), + ...getFieldNamesByType('long'), '`avg(b)`', - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFunctionSignaturesByReturnType('eval', ['integer', 'double', 'long'], { + scalar: true, + }), + ...allGroupingFunctions, ]); await assertSuggestions('from a | stats avg(b) by var0 = /', [ @@ -226,7 +265,12 @@ describe('autocomplete.suggest', () => { test('on space after expression right hand side operand', async () => { const { assertSuggestions } = await setup(); - await assertSuggestions('from a | stats avg(b) by numberField % 2 /', [',', '|']); + await assertSuggestions('from a | stats avg(b) by doubleField % 2 /', [',', '|']); + + await assertSuggestions( + 'from a | stats var0 = AVG(doubleField) BY var1 = BUCKET(dateField, 1 day)/', + [',', '|', '+ $0', '- $0'] + ); }); }); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts index 3d9ed7058a4a8..6600ffdbaf1d8 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts @@ -41,7 +41,7 @@ export const triggerCharacters = [',', '(', '=', ' ']; export const fields: Array<{ name: string; type: string; suggestedAs?: string }> = [ ...[ 'string', - 'number', + 'double', 'date', 'boolean', 'ip', @@ -53,8 +53,8 @@ export const fields: Array<{ name: string; type: string; suggestedAs?: string }> name: `${camelCase(type)}Field`, type, })), - { name: 'any#Char$Field', type: 'number', suggestedAs: '`any#Char$Field`' }, - { name: 'kubernetes.something.something', type: 'number' }, + { name: 'any#Char$Field', type: 'double', suggestedAs: '`any#Char$Field`' }, + { name: 'kubernetes.something.something', type: 'double' }, ]; export const indexes = ( diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index d4ad5157d979a..d9c958b5bd4f7 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -10,15 +10,10 @@ import { suggest } from './autocomplete'; import { evalFunctionDefinitions } from '../definitions/functions'; import { timeUnitsToSuggest } from '../definitions/literals'; import { commandDefinitions } from '../definitions/commands'; -import { - getSafeInsertText, - getUnitDuration, - TRIGGER_SUGGESTION_COMMAND, - TIME_SYSTEM_PARAMS, -} from './factories'; +import { getSafeInsertText, getUnitDuration, TRIGGER_SUGGESTION_COMMAND } from './factories'; import { camelCase, partition } from 'lodash'; import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; -import { FunctionParameter } from '../definitions/types'; +import { FunctionParameter, FunctionReturnType } from '../definitions/types'; import { getParamAtPosition } from './helper'; import { nonNullable } from '../shared/helpers'; import { @@ -31,9 +26,16 @@ import { createCompletionContext, getPolicyFields, PartialSuggestionWithText, - TIME_PICKER_SUGGESTION, } from './__tests__/helpers'; import { METADATA_FIELDS } from '../shared/constants'; +import { + ESQL_COMMON_NUMERIC_TYPES as UNCASTED_ESQL_COMMON_NUMERIC_TYPES, + ESQL_NUMBER_TYPES, +} from '../shared/esql_types'; + +const ESQL_NUMERIC_TYPES = ESQL_NUMBER_TYPES as unknown as string[]; +const ESQL_COMMON_NUMERIC_TYPES = + UNCASTED_ESQL_COMMON_NUMERIC_TYPES as unknown as FunctionReturnType[]; describe('autocomplete', () => { type TestArgs = [ @@ -166,25 +168,18 @@ describe('autocomplete', () => { ['string'] ), ]); - testSuggestions('from a | where stringField >= ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('where', 'string', { scalar: true }), + testSuggestions('from a | where textField >= ', [ + ...getFieldNamesByType('any'), + ...getFunctionSignaturesByReturnType('where', ['any'], { scalar: true }), ]); // Skip these tests until the insensitive case equality gets restored back testSuggestions.skip('from a | where stringField =~ ', [ ...getFieldNamesByType('string'), ...getFunctionSignaturesByReturnType('where', 'string', { scalar: true }), ]); - testSuggestions('from a | where stringField >= stringField ', [ - '|', - ...getFunctionSignaturesByReturnType( - 'where', - 'boolean', - { - builtin: true, - }, - ['boolean'] - ), + testSuggestions('from a | where textField >= textField', [ + ...getFieldNamesByType('any'), + ...getFunctionSignaturesByReturnType('where', 'any', { scalar: true }), ]); testSuggestions.skip('from a | where stringField =~ stringField ', [ '|', @@ -202,52 +197,60 @@ describe('autocomplete', () => { ...getFieldNamesByType('any'), ...getFunctionSignaturesByReturnType('where', 'any', { scalar: true }), ]); - testSuggestions(`from a | where stringField >= stringField ${op} numberField `, [ - ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['number']), + testSuggestions(`from a | where stringField >= stringField ${op} doubleField `, [ + ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['double']), ]); - testSuggestions(`from a | where stringField >= stringField ${op} numberField == `, [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + testSuggestions(`from a | where stringField >= stringField ${op} doubleField == `, [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('where', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); } - testSuggestions('from a | stats a=avg(numberField) | where a ', [ + testSuggestions('from a | stats a=avg(doubleField) | where a ', [ ...getFunctionSignaturesByReturnType('where', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ]); // Mind this test: suggestion is aware of previous commands when checking for fields - // in this case the numberField has been wiped by the STATS command and suggest cannot find it's type + // in this case the doubleField has been wiped by the STATS command and suggest cannot find it's type // @TODO: verify this is the correct behaviour in this case or if we want a "generic" suggestion anyway testSuggestions( - 'from a | stats a=avg(numberField) | where numberField ', + 'from a | stats a=avg(doubleField) | where doubleField ', [], undefined, undefined, // make the fields suggest aware of the previous STATS, leave the other callbacks untouched - [[{ name: 'a', type: 'number' }], undefined, undefined] + [[{ name: 'a', type: 'double' }], undefined, undefined] ); // The editor automatically inject the final bracket, so it is not useful to test with just open bracket testSuggestions( 'from a | where log10()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }, undefined, [ - 'log10', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'where', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['log10'] + ), ], '(' ); - testSuggestions('from a | where log10(numberField) ', [ - ...getFunctionSignaturesByReturnType('where', 'number', { builtin: true }, ['number']), - ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['number']), + testSuggestions('from a | where log10(doubleField) ', [ + ...getFunctionSignaturesByReturnType('where', 'double', { builtin: true }, ['double']), + ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['double']), ]); testSuggestions( - 'from a | WHERE pow(numberField, )', + 'from a | WHERE pow(doubleField, )', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }, undefined, [ - 'pow', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'where', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['pow'] + ), ], ',' ); @@ -258,34 +261,34 @@ describe('autocomplete', () => { ...getFieldNamesByType('boolean'), ...getFunctionSignaturesByReturnType('eval', 'boolean', { scalar: true }), ]); - testSuggestions('from index | WHERE numberField in ', ['( $0 )']); - testSuggestions('from index | WHERE numberField not in ', ['( $0 )']); + testSuggestions('from index | WHERE doubleField in ', ['( $0 )']); + testSuggestions('from index | WHERE doubleField not in ', ['( $0 )']); testSuggestions( - 'from index | WHERE numberField not in ( )', + 'from index | WHERE doubleField not in ( )', [ - ...getFieldNamesByType('number').filter((name) => name !== 'numberField'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + ...getFieldNamesByType('double').filter((name) => name !== 'doubleField'), + ...getFunctionSignaturesByReturnType('where', 'double', { scalar: true }), ], '(' ); testSuggestions( - 'from index | WHERE numberField in ( `any#Char$Field`, )', + 'from index | WHERE doubleField in ( `any#Char$Field`, )', [ - ...getFieldNamesByType('number').filter( - (name) => name !== '`any#Char$Field`' && name !== 'numberField' + ...getFieldNamesByType('double').filter( + (name) => name !== '`any#Char$Field`' && name !== 'doubleField' ), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + ...getFunctionSignaturesByReturnType('where', 'double', { scalar: true }), ], undefined, 54 // after the first suggestions ); testSuggestions( - 'from index | WHERE numberField not in ( `any#Char$Field`, )', + 'from index | WHERE doubleField not in ( `any#Char$Field`, )', [ - ...getFieldNamesByType('number').filter( - (name) => name !== '`any#Char$Field`' && name !== 'numberField' + ...getFieldNamesByType('double').filter( + (name) => name !== '`any#Char$Field`' && name !== 'doubleField' ), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + ...getFunctionSignaturesByReturnType('where', 'double', { scalar: true }), ], undefined, 58 // after the first suggestions @@ -377,14 +380,14 @@ describe('autocomplete', () => { ); testSuggestions( - `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 | ${command} `, + `from a_index | eval round(doubleField) + 1 | eval \`round(doubleField) + 1\` + 1 | eval \`\`\`round(doubleField) + 1\`\` + 1\` + 1 | eval \`\`\`\`\`\`\`round(doubleField) + 1\`\`\`\` + 1\`\` + 1\` + 1 | eval \`\`\`\`\`\`\`\`\`\`\`\`\`\`\`round(doubleField) + 1\`\`\`\`\`\`\`\` + 1\`\`\`\` + 1\`\` + 1\` + 1 | ${command} `, [ ...getFieldNamesByType('any'), - '`round(numberField) + 1`', - '```round(numberField) + 1`` + 1`', - '```````round(numberField) + 1```` + 1`` + 1`', - '```````````````round(numberField) + 1```````` + 1```` + 1`` + 1`', - '```````````````````````````````round(numberField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`', + '`round(doubleField) + 1`', + '```round(doubleField) + 1`` + 1`', + '```````round(doubleField) + 1```` + 1`` + 1`', + '```````````````round(doubleField) + 1```````` + 1```` + 1`` + 1`', + '```````````````````````````````round(doubleField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`', ] ); }); @@ -413,7 +416,7 @@ describe('autocomplete', () => { testSuggestions(`from a ${prevCommand}| enrich policy `, ['ON $0', 'WITH $0', '|']); testSuggestions(`from a ${prevCommand}| enrich policy on `, [ 'stringField', - 'numberField', + 'doubleField', 'dateField', 'booleanField', 'ipField', @@ -466,25 +469,25 @@ describe('autocomplete', () => { ...getFieldNamesByType('any'), ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval numberField ', [ + testSuggestions('from a | eval doubleField ', [ ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ',', '|', ]); testSuggestions('from index | EVAL stringField not ', ['LIKE $0', 'RLIKE $0', 'IN $0']); testSuggestions('from index | EVAL stringField NOT ', ['LIKE $0', 'RLIKE $0', 'IN $0']); - testSuggestions('from index | EVAL numberField in ', ['( $0 )']); + testSuggestions('from index | EVAL doubleField in ', ['( $0 )']); testSuggestions( - 'from index | EVAL numberField in ( )', + 'from index | EVAL doubleField in ( )', [ - ...getFieldNamesByType('number').filter((name) => name !== 'numberField'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType('double').filter((name) => name !== 'doubleField'), + ...getFunctionSignaturesByReturnType('eval', 'double', { scalar: true }), ], '(' ); - testSuggestions('from index | EVAL numberField not in ', ['( $0 )']); + testSuggestions('from index | EVAL doubleField not in ', ['( $0 )']); testSuggestions('from index | EVAL not ', [ ...getFieldNamesByType('boolean'), ...getFunctionSignaturesByReturnType('eval', 'boolean', { scalar: true }), @@ -492,10 +495,10 @@ describe('autocomplete', () => { testSuggestions('from a | eval a=', [ ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval a=abs(numberField), b= ', [ + testSuggestions('from a | eval a=abs(doubleField), b= ', [ ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval a=numberField, ', [ + testSuggestions('from a | eval a=doubleField, ', [ 'var0 =', ...getFieldNamesByType('any'), 'a', @@ -509,10 +512,14 @@ describe('autocomplete', () => { testSuggestions( 'from a | eval a=round()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ], '(' ); @@ -539,64 +546,59 @@ describe('autocomplete', () => { [], ' ' ); - testSuggestions('from a | eval a=round(numberField) ', [ + testSuggestions('from a | eval a=round(doubleField) ', [ ',', '|', ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ]); testSuggestions( - 'from a | eval a=round(numberField, ', + 'from a | eval a=round(doubleField, ', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ + ...getFieldNamesByType('integer'), + ...getFunctionSignaturesByReturnType('eval', 'integer', { scalar: true }, undefined, [ 'round', ]), ], ' ' ); testSuggestions( - 'from a | eval round(numberField, ', + 'from a | eval round(doubleField, ', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ + ...getFunctionSignaturesByReturnType('eval', 'integer', { scalar: true }, undefined, [ 'round', ]), ], ' ' ); - testSuggestions('from a | eval a=round(numberField),', [ + testSuggestions('from a | eval a=round(doubleField),', [ 'var0 =', ...getFieldNamesByType('any'), 'a', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval a=round(numberField) + ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + testSuggestions('from a | eval a=round(doubleField) + ', [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); - testSuggestions('from a | eval a=round(numberField)+ ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + testSuggestions('from a | eval a=round(doubleField)+ ', [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); - testSuggestions('from a | eval a=numberField+ ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + testSuggestions('from a | eval a=doubleField+ ', [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); testSuggestions('from a | eval a=`any#Char$Field`+ ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); testSuggestions( - 'from a | stats avg(numberField) by stringField | eval ', + 'from a | stats avg(doubleField) by stringField | eval ', [ 'var0 =', - '`avg(numberField)`', + '`avg(doubleField)`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], ' ', @@ -605,32 +607,32 @@ describe('autocomplete', () => { [[], undefined, undefined] ); testSuggestions( - 'from a | eval abs(numberField) + 1 | eval ', + 'from a | eval abs(doubleField) + 1 | eval ', [ 'var0 =', ...getFieldNamesByType('any'), - '`abs(numberField) + 1`', + '`abs(doubleField) + 1`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], ' ' ); testSuggestions( - 'from a | stats avg(numberField) by stringField | eval ', + 'from a | stats avg(doubleField) by stringField | eval ', [ 'var0 =', - '`avg(numberField)`', + '`avg(doubleField)`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], ' ', undefined, // make aware EVAL of the previous STATS command with the buggy field name from expression - [[{ name: 'avg_numberField_', type: 'number' }], undefined, undefined] + [[{ name: 'avg_doubleField_', type: 'double' }], undefined, undefined] ); testSuggestions( - 'from a | stats avg(numberField), avg(kubernetes.something.something) by stringField | eval ', + 'from a | stats avg(doubleField), avg(kubernetes.something.something) by stringField | eval ', [ 'var0 =', - '`avg(numberField)`', + '`avg(doubleField)`', '`avg(kubernetes.something.something)`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], @@ -639,48 +641,64 @@ describe('autocomplete', () => { // make aware EVAL of the previous STATS command with the buggy field name from expression [ [ - { name: 'avg_numberField_', type: 'number' }, - { name: 'avg_kubernetes.something.something_', type: 'number' }, + { name: 'avg_doubleField_', type: 'double' }, + { name: 'avg_kubernetes.something.something_', type: 'double' }, ], undefined, undefined, ] ); testSuggestions( - 'from a | eval a=round(numberField), b=round()', + 'from a | eval a=round(doubleField), b=round()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ], '(' ); // test that comma is correctly added to the suggestions if minParams is not reached yet testSuggestions('from a | eval a=concat( ', [ - ...getFieldNamesByType('string').map((v) => `${v},`), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'concat', - ]).map((v) => ({ ...v, text: `${v.text},` })), + ...getFieldNamesByType(['text', 'keyword']).map((v) => `${v},`), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['concat'] + ).map((v) => ({ ...v, text: `${v.text},` })), ]); testSuggestions( - 'from a | eval a=concat(stringField, ', + 'from a | eval a=concat(textField, ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'concat', - ]), + ...getFieldNamesByType(['text', 'keyword']), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['concat'] + ), ], ' ' ); // test that the arg type is correct after minParams testSuggestions( - 'from a | eval a=cidr_match(ipField, stringField, ', + 'from a | eval a=cidr_match(ipField, textField, ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'cidr_match', - ]), + ...getFieldNamesByType('text'), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['cidr_match'] + ), ], ' ' ); @@ -694,10 +712,14 @@ describe('autocomplete', () => { testSuggestions( 'from a | eval a=cidr_match(ipField, ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'cidr_match', - ]), + ...getFieldNamesByType(['text', 'keyword']), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['cidr_match'] + ), ], ' ' ); @@ -709,10 +731,14 @@ describe('autocomplete', () => { testSuggestions( `from a | eval a=${Array(nesting).fill('round(').join('')}`, [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ], '(' ); @@ -720,12 +746,12 @@ describe('autocomplete', () => { // Smoke testing for suggestions in previous position than the end of the statement testSuggestions( - 'from a | eval var0 = abs(numberField) | eval abs(var0)', + 'from a | eval var0 = abs(doubleField) | eval abs(var0)', [ ',', '|', ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ], undefined, @@ -734,10 +760,14 @@ describe('autocomplete', () => { testSuggestions( 'from a | eval var0 = abs(b) | eval abs(var0)', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'abs', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['abs'] + ), ], undefined, 26 /* b column in abs */ @@ -746,7 +776,7 @@ describe('autocomplete', () => { // Test suggestions for each possible param, within each signature variation, for each function for (const fn of evalFunctionDefinitions) { // skip this fn for the moment as it's quite hard to test - if (fn.name !== 'bucket') { + if (!['bucket', 'date_extract', 'date_diff'].includes(fn.name)) { for (const signature of fn.signatures) { signature.params.forEach((param, i) => { if (i < signature.params.length) { @@ -822,6 +852,23 @@ describe('autocomplete', () => { }); } } + + // The above test fails cause it expects nested functions like + // DATE_EXTRACT(concat("aligned_day_","of_week_in_month"), date) to also be suggested + // which is actually valid according to func signature + // but currently, our autocomplete only suggests the literal suggestions + if (['date_extract', 'date_diff'].includes(fn.name)) { + const firstParam = fn.signatures[0].params[0]; + const suggestedConstants = firstParam?.literalSuggestions || firstParam?.literalOptions; + const requiresMoreArgs = true; + + testSuggestions( + `from a | eval ${fn.name}(`, + suggestedConstants?.length + ? [...suggestedConstants.map((option) => `"${option}"${requiresMoreArgs ? ',' : ''}`)] + : [] + ); + } } testSuggestions('from a | eval var0 = bucket(@timestamp, ', getUnitDuration(1), ' '); @@ -836,7 +883,7 @@ describe('autocomplete', () => { ',', '|', ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'integer', ]), ], ' ' @@ -848,39 +895,20 @@ describe('autocomplete', () => { 'time_interval', ]), ]); - testSuggestions( - 'from a | eval a = 1 day + 2 ', - [ - ...dateSuggestions, - ',', - '|', - ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', - ]), - ], - ' ' - ); + testSuggestions('from a | eval a = 1 day + 2 ', [',', '|']); testSuggestions( 'from a | eval 1 day + 2 ', [ ...dateSuggestions, ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'integer', ]), ], ' ' ); testSuggestions( 'from a | eval var0=date_trunc()', - [ - ...[...TIME_SYSTEM_PARAMS].map((t) => `${t},`), - ...getLiteralsByType('time_literal').map((t) => `${t},`), - ...getFunctionSignaturesByReturnType('eval', 'date', { scalar: true }, undefined, [ - 'date_trunc', - ]).map((t) => ({ ...t, text: `${t.text},` })), - ...getFieldNamesByType('date').map((t) => `${t},`), - TIME_PICKER_SUGGESTION, - ], + [...getLiteralsByType('time_literal').map((t) => `${t},`)], '(' ); testSuggestions( @@ -917,7 +945,7 @@ describe('autocomplete', () => { describe('callbacks', () => { it('should send the fields query without the last command', async () => { const callbackMocks = createCustomCallbackMocks(undefined, undefined, undefined); - const statement = 'from a | drop stringField | eval var0 = abs(numberField) '; + const statement = 'from a | drop stringField | eval var0 = abs(doubleField) '; const triggerOffset = statement.lastIndexOf(' '); const context = createCompletionContext(statement[triggerOffset]); await suggest( @@ -933,7 +961,7 @@ describe('autocomplete', () => { }); it('should send the fields query aware of the location', async () => { const callbackMocks = createCustomCallbackMocks(undefined, undefined, undefined); - const statement = 'from a | drop | eval var0 = abs(numberField) '; + const statement = 'from a | drop | eval var0 = abs(doubleField) '; const triggerOffset = statement.lastIndexOf('p') + 1; // drop const context = createCompletionContext(statement[triggerOffset]); await suggest( @@ -1025,10 +1053,13 @@ describe('autocomplete', () => { testSuggestions( 'FROM kibana_sample_data_logs | EVAL TRIM(e)', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'trim', - ]), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['trim'] + ), ], undefined, 42 diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index 807bc32ba82b0..d2d617aac4315 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -16,6 +16,7 @@ import type { ESQLSingleAstItem, } from '@kbn/esql-ast'; import { partition } from 'lodash'; +import { ESQL_NUMBER_TYPES, isNumericType } from '../shared/esql_types'; import type { EditorContext, SuggestionRawDefinition } from './types'; import { lookupColumn, @@ -88,6 +89,7 @@ import { getParamAtPosition, getQueryForFields, getSourcesFromCommands, + getSupportedTypesForBinaryOperators, isAggFunctionUsedAlready, removeQuoteForSuggestedSources, } from './helper'; @@ -124,7 +126,7 @@ function appendEnrichFields( // @TODO: improve this const newMap: Map = new Map(fieldsMap); for (const field of policyMetadata.enrichFields) { - newMap.set(field, { name: field, type: 'number' }); + newMap.set(field, { name: field, type: 'double' }); } return newMap; } @@ -732,7 +734,7 @@ async function getExpressionSuggestionsByType( workoutBuiltinOptions(rightArg, references) ) ); - if (nodeArgType === 'number' && isLiteralItem(rightArg)) { + if (isNumericType(nodeArgType) && isLiteralItem(rightArg)) { // ... EVAL var = 1 suggestions.push(...getCompatibleLiterals(command.name, ['time_literal_unit'])); } @@ -740,7 +742,7 @@ async function getExpressionSuggestionsByType( if (rightArg.args.some(isTimeIntervalItem)) { const lastFnArg = rightArg.args[rightArg.args.length - 1]; const lastFnArgType = extractFinalTypeFromArg(lastFnArg, references); - if (lastFnArgType === 'number' && isLiteralItem(lastFnArg)) + if (isNumericType(lastFnArgType) && isLiteralItem(lastFnArg)) // ... EVAL var = 1 year + 2 suggestions.push(...getCompatibleLiterals(command.name, ['time_literal_unit'])); } @@ -777,7 +779,7 @@ async function getExpressionSuggestionsByType( if (nodeArg.args.some(isTimeIntervalItem)) { const lastFnArg = nodeArg.args[nodeArg.args.length - 1]; const lastFnArgType = extractFinalTypeFromArg(lastFnArg, references); - if (lastFnArgType === 'number' && isLiteralItem(lastFnArg)) + if (isNumericType(lastFnArgType) && isLiteralItem(lastFnArg)) // ... EVAL var = 1 year + 2 suggestions.push(...getCompatibleLiterals(command.name, ['time_literal_unit'])); } @@ -793,7 +795,10 @@ async function getExpressionSuggestionsByType( suggestions.push(...buildConstantsDefinitions(argDef.values)); } // If the type is specified try to dig deeper in the definition to suggest the best candidate - if (['string', 'number', 'boolean'].includes(argDef.type) && !argDef.values) { + if ( + ['string', 'text', 'keyword', 'boolean', ...ESQL_NUMBER_TYPES].includes(argDef.type) && + !argDef.values + ) { // it can be just literal values (i.e. "string") if (argDef.constantOnly) { // ... | ... @@ -971,6 +976,7 @@ async function getBuiltinFunctionNextArgument( ) { const suggestions = []; const isFnComplete = isFunctionArgComplete(nodeArg, references); + if (isFnComplete.complete) { // i.e. ... | field > 0 // i.e. ... | field + otherN @@ -1001,17 +1007,16 @@ async function getBuiltinFunctionNextArgument( suggestions.push(listCompleteItem); } else { const finalType = nestedType || nodeArgType || 'any'; + const supportedTypes = getSupportedTypesForBinaryOperators(fnDef, finalType); suggestions.push( ...(await getFieldsOrFunctionsSuggestions( // this is a special case with AND/OR // expression AND/OR // technically another boolean value should be suggested, but it is a better experience // to actually suggest a wider set of fields/functions - [ - finalType === 'boolean' && getFunctionDefinition(nodeArg.name)?.type === 'builtin' - ? 'any' - : finalType, - ], + finalType === 'boolean' && getFunctionDefinition(nodeArg.name)?.type === 'builtin' + ? ['any'] + : supportedTypes, command.name, option?.name, getFieldsByType, @@ -1321,7 +1326,7 @@ async function getFunctionArgsSuggestions( // for eval and row commands try also to complete numeric literals with time intervals where possible if (arg) { if (command.name !== 'stats') { - if (isLiteralItem(arg) && arg.literalType === 'number') { + if (isLiteralItem(arg) && isNumericType(arg.literalType)) { // ... | EVAL fn(2 ) suggestions.push( ...(await getFieldsOrFunctionsSuggestions( @@ -1625,6 +1630,22 @@ async function getOptionArgsSuggestions( ); } } + + // If it's a complete expression then propose some final suggestions + if ( + (!nodeArgType && + option.name === 'by' && + option.args.length && + !isNewExpression && + !isAssignment(lastArg)) || + (isAssignment(lastArg) && isAssignmentComplete(lastArg)) + ) { + suggestions.push( + ...getFinalSuggestions({ + comma: optionDef?.signature.multipleParams ?? option.name === 'by', + }) + ); + } } if (optionDef) { diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts index f54511c8e304d..cb56f40a6d6f4 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts @@ -22,7 +22,8 @@ import { import { shouldBeQuotedSource, getCommandDefinition, shouldBeQuotedText } from '../shared/helpers'; import { buildDocumentation, buildFunctionDocumentation } from './documentation_util'; import { DOUBLE_BACKTICK, SINGLE_TICK_REGEX } from '../shared/constants'; -import type { ESQLRealField } from '../validation/types'; +import { ESQLRealField } from '../validation/types'; +import { isNumericType } from '../shared/esql_types'; const allFunctions = statsAggregationFunctionDefinitions .concat(evalFunctionDefinitions) @@ -359,7 +360,7 @@ export function getUnitDuration(unit: number = 1) { */ export function getCompatibleLiterals(commandName: string, types: string[], names?: string[]) { const suggestions: SuggestionRawDefinition[] = []; - if (types.includes('number')) { + if (types.some(isNumericType)) { if (commandName === 'limit') { // suggest 10/100/1000 for limit suggestions.push(...buildConstantsDefinitions(['10', '100', '1000'], '')); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts index f9586670b29e6..65f6601c51c13 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts @@ -80,3 +80,15 @@ export function removeQuoteForSuggestedSources(suggestions: SuggestionRawDefinit text: d.text.startsWith('"') && d.text.endsWith('"') ? d.text.slice(1, -1) : d.text, })); } + +export function getSupportedTypesForBinaryOperators( + fnDef: FunctionDefinition | undefined, + previousType: string +) { + // Retrieve list of all 'right' supported types that match the left hand side of the function + return fnDef && Array.isArray(fnDef?.signatures) + ? fnDef.signatures + .filter(({ params }) => params.find((p) => p.name === 'left' && p.type === previousType)) + .map(({ params }) => params[1].type) + : [previousType]; +} diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts index a27b8a68a9be0..97dc654f525ce 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts @@ -7,15 +7,18 @@ */ import { i18n } from '@kbn/i18n'; -import type { FunctionDefinition, FunctionParameterType } from './types'; +import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../shared/esql_types'; +import type { FunctionDefinition, FunctionParameterType, FunctionReturnType } from './types'; function createNumericAggDefinition({ name, description, + returnType, args = [], }: { name: string; description: string; + returnType?: (numericType: FunctionParameterType) => FunctionReturnType; args?: Array<{ name: string; type: FunctionParameterType; @@ -30,9 +33,9 @@ function createNumericAggDefinition({ description, supportedCommands: ['stats', 'metrics'], signatures: [ - { + ...ESQL_NUMBER_TYPES.map((numericType) => ({ params: [ - { name: 'column', type: 'number', noNestingFunctions: true }, + { name: 'column', type: numericType, noNestingFunctions: true }, ...args.map(({ name: paramName, type, constantOnly }) => ({ name: paramName, type, @@ -40,8 +43,8 @@ function createNumericAggDefinition({ constantOnly, })), ], - returnType: 'number', - }, + returnType: returnType ? returnType(numericType) : numericType, + })), ], examples: [ `from index | stats result = ${name}(field${extraParamsExample})`, @@ -56,18 +59,28 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.avgDoc', { defaultMessage: 'Returns the average of the values in a field', }), + returnType: () => 'double' as FunctionReturnType, }, { name: 'sum', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sumDoc', { defaultMessage: 'Returns the sum of the values in a field.', }), + returnType: (numericType: FunctionParameterType): FunctionReturnType => { + switch (numericType) { + case 'double': + return 'double'; + default: + return 'long'; + } + }, }, { name: 'median', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.medianDoc', { defaultMessage: 'Returns the 50% percentile.', }), + returnType: () => 'double' as FunctionReturnType, }, { name: 'median_absolute_deviation', @@ -78,20 +91,42 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ 'Returns the median of each data point’s deviation from the median of the entire sample.', } ), - }, - { - name: 'percentile', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc', - { - defaultMessage: 'Returns the n percentile of a field.', - } - ), - args: [{ name: 'percentile', type: 'number' as const, value: '90', constantOnly: true }], + returnType: () => 'double' as FunctionReturnType, }, ] .map(createNumericAggDefinition) .concat([ + { + name: 'percentile', + description: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc', + { + defaultMessage: 'Returns the n percentile of a field.', + } + ), + type: 'agg', + supportedCommands: ['stats', 'metrics'], + signatures: [ + ...ESQL_COMMON_NUMERIC_TYPES.map((numericType: FunctionParameterType) => { + return ESQL_COMMON_NUMERIC_TYPES.map((weightType: FunctionParameterType) => ({ + params: [ + { + name: 'column', + type: numericType, + noNestingFunctions: true, + }, + { + name: 'percentile', + type: weightType, + noNestingFunctions: true, + constantOnly: true, + }, + ], + returnType: 'double' as FunctionReturnType, + })); + }).flat(), + ], + }, { name: 'max', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.maxDoc', { @@ -100,13 +135,17 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ type: 'agg', supportedCommands: ['stats', 'metrics'], signatures: [ + ...ESQL_COMMON_NUMERIC_TYPES.map((type) => ({ + params: [{ name: 'column', type, noNestingFunctions: true }], + returnType: type, + })), { - params: [{ name: 'column', type: 'number', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date', noNestingFunctions: true }], + returnType: 'date', }, { - params: [{ name: 'column', type: 'date', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date_period', noNestingFunctions: true }], + returnType: 'date_period', }, { params: [{ name: 'column', type: 'boolean', noNestingFunctions: true }], @@ -127,13 +166,17 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ type: 'agg', supportedCommands: ['stats', 'metrics'], signatures: [ + ...ESQL_COMMON_NUMERIC_TYPES.map((type) => ({ + params: [{ name: 'column', type, noNestingFunctions: true }], + returnType: type, + })), { - params: [{ name: 'column', type: 'number', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date', noNestingFunctions: true }], + returnType: 'date', }, { - params: [{ name: 'column', type: 'date', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date_period', noNestingFunctions: true }], + returnType: 'date_period', }, { params: [{ name: 'column', type: 'boolean', noNestingFunctions: true }], @@ -166,7 +209,7 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ optional: true, }, ], - returnType: 'number', + returnType: 'long', }, ], examples: [`from index | stats result = count(field)`, `from index | stats count(field)`], @@ -185,9 +228,14 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ { params: [ { name: 'column', type: 'any', noNestingFunctions: true }, - { name: 'precision', type: 'number', noNestingFunctions: true, optional: true }, + ...ESQL_NUMBER_TYPES.map((type) => ({ + name: 'precision', + type, + noNestingFunctions: true, + optional: true, + })), ], - returnType: 'number', + returnType: 'long', }, ], examples: [ @@ -258,14 +306,14 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ }, { name: 'limit', - type: 'number', + type: 'integer', noNestingFunctions: true, optional: false, constantOnly: true, }, { name: 'order', - type: 'string', + type: 'keyword', noNestingFunctions: true, optional: false, constantOnly: true, @@ -292,23 +340,25 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ ), supportedCommands: ['stats', 'metrics'], signatures: [ - { - params: [ - { - name: 'number', - type: 'number', - noNestingFunctions: true, - optional: false, - }, - { - name: 'weight', - type: 'number', - noNestingFunctions: true, - optional: false, - }, - ], - returnType: 'number', - }, + ...ESQL_COMMON_NUMERIC_TYPES.map((numericType: FunctionParameterType) => { + return ESQL_COMMON_NUMERIC_TYPES.map((weightType: FunctionParameterType) => ({ + params: [ + { + name: 'number', + type: numericType, + noNestingFunctions: true, + optional: false, + }, + { + name: 'weight', + type: weightType, + noNestingFunctions: true, + optional: false, + }, + ], + returnType: 'double' as FunctionReturnType, + })); + }).flat(), ], examples: [ `from employees | stats w_avg = weighted_avg(salary, height) by languages | eval w_avg = round(w_avg)`, diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts index a32cba3d191c3..10945d1c6b135 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts @@ -7,14 +7,14 @@ */ import { i18n } from '@kbn/i18n'; +import { ESQL_NUMBER_TYPES, isNumericType } from '../shared/esql_types'; import type { FunctionDefinition, FunctionParameterType, FunctionReturnType } from './types'; +type MathFunctionSignature = [FunctionParameterType, FunctionParameterType, FunctionReturnType]; + function createMathDefinition( name: string, - types: Array< - | (FunctionParameterType & FunctionReturnType) - | [FunctionParameterType, FunctionParameterType, FunctionReturnType] - >, + functionSignatures: MathFunctionSignature[], description: string, validate?: FunctionDefinition['validate'] ): FunctionDefinition { @@ -24,28 +24,41 @@ function createMathDefinition( description, supportedCommands: ['eval', 'where', 'row', 'stats', 'metrics', 'sort'], supportedOptions: ['by'], - signatures: types.map((type) => { - if (Array.isArray(type)) { - return { - params: [ - { name: 'left', type: type[0] }, - { name: 'right', type: type[1] }, - ], - returnType: type[2], - }; - } + signatures: functionSignatures.map((functionSignature) => { + const [lhs, rhs, result] = functionSignature; return { params: [ - { name: 'left', type }, - { name: 'right', type }, + { name: 'left', type: lhs }, + { name: 'right', type: rhs }, ], - returnType: type, + returnType: result, }; }), validate, }; } +// https://www.elastic.co/guide/en/elasticsearch/reference/master/esql-functions-operators.html#_less_than +const baseComparisonTypeTable: MathFunctionSignature[] = [ + ['date', 'date', 'boolean'], + ['double', 'double', 'boolean'], + ['double', 'integer', 'boolean'], + ['double', 'long', 'boolean'], + ['integer', 'double', 'boolean'], + ['integer', 'integer', 'boolean'], + ['integer', 'long', 'boolean'], + ['ip', 'ip', 'boolean'], + ['keyword', 'keyword', 'boolean'], + ['keyword', 'text', 'boolean'], + ['long', 'double', 'boolean'], + ['long', 'integer', 'boolean'], + ['long', 'long', 'boolean'], + ['text', 'keyword', 'boolean'], + ['text', 'text', 'boolean'], + ['unsigned_long', 'unsigned_long', 'boolean'], + ['version', 'version', 'boolean'], +]; + function createComparisonDefinition( { name, @@ -58,6 +71,17 @@ function createComparisonDefinition( }, validate?: FunctionDefinition['validate'] ): FunctionDefinition { + const commonSignatures = baseComparisonTypeTable.map((functionSignature) => { + const [lhs, rhs, result] = functionSignature; + return { + params: [ + { name: 'left', type: lhs }, + { name: 'right', type: rhs }, + ], + returnType: result, + }; + }); + return { type: 'builtin' as const, name, @@ -66,41 +90,7 @@ function createComparisonDefinition( supportedOptions: ['by'], validate, signatures: [ - { - params: [ - { name: 'left', type: 'number' }, - { name: 'right', type: 'number' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'string' }, - { name: 'right', type: 'string' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'date' }, - { name: 'right', type: 'date' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'ip' }, - { name: 'right', type: 'ip' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'version' }, - { name: 'right', type: 'version' }, - ], - returnType: 'boolean', - }, + ...commonSignatures, // constant strings okay because of implicit casting for // string to version and ip // @@ -113,13 +103,13 @@ function createComparisonDefinition( { params: [ { name: 'left', type }, - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'right', type: 'text' as const, constantOnly: true }, ], returnType: 'boolean' as const, }, { params: [ - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'left', type: 'text' as const, constantOnly: true }, { name: 'right', type }, ], returnType: 'boolean' as const, @@ -130,31 +120,111 @@ function createComparisonDefinition( }; } +const addTypeTable: MathFunctionSignature[] = [ + ['date_period', 'date_period', 'date_period'], + ['date_period', 'date', 'date'], + ['date', 'date_period', 'date'], + ['date', 'time_duration', 'date'], + ['date', 'time_literal', 'date'], + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['time_duration', 'date', 'date'], + ['time_duration', 'time_duration', 'time_duration'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], + ['time_literal', 'date', 'date'], +]; + +const subtractTypeTable: MathFunctionSignature[] = [ + ['date_period', 'date_period', 'date_period'], + ['date', 'date_period', 'date'], + ['date', 'time_duration', 'date'], + ['date', 'time_literal', 'date'], + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['time_duration', 'date', 'date'], + ['time_duration', 'time_duration', 'time_duration'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], + ['time_literal', 'date', 'date'], +]; + +const multiplyTypeTable: MathFunctionSignature[] = [ + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], +]; + +const divideTypeTable: MathFunctionSignature[] = [ + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], +]; + +const modulusTypeTable: MathFunctionSignature[] = [ + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], +]; + export const mathFunctions: FunctionDefinition[] = [ createMathDefinition( '+', - ['number', ['date', 'time_literal', 'date'], ['time_literal', 'date', 'date']], + addTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.addDoc', { defaultMessage: 'Add (+)', }) ), createMathDefinition( '-', - ['number', ['date', 'time_literal', 'date'], ['time_literal', 'date', 'date']], + subtractTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.subtractDoc', { defaultMessage: 'Subtract (-)', }) ), createMathDefinition( '*', - ['number'], + multiplyTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.multiplyDoc', { defaultMessage: 'Multiply (*)', }) ), createMathDefinition( '/', - ['number'], + divideTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.divideDoc', { defaultMessage: 'Divide (/)', }), @@ -162,7 +232,7 @@ export const mathFunctions: FunctionDefinition[] = [ const [left, right] = fnDef.args; const messages = []; if (!Array.isArray(left) && !Array.isArray(right)) { - if (right.type === 'literal' && right.literalType === 'number') { + if (right.type === 'literal' && isNumericType(right.literalType)) { if (right.value === 0) { messages.push({ type: 'warning' as const, @@ -187,7 +257,7 @@ export const mathFunctions: FunctionDefinition[] = [ ), createMathDefinition( '%', - ['number'], + modulusTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.moduleDoc', { defaultMessage: 'Module (%)', }), @@ -195,7 +265,7 @@ export const mathFunctions: FunctionDefinition[] = [ const [left, right] = fnDef.args; const messages = []; if (!Array.isArray(left) && !Array.isArray(right)) { - if (right.type === 'literal' && right.literalType === 'number') { + if (right.type === 'literal' && isNumericType(right.literalType)) { if (right.value === 0) { messages.push({ type: 'warning' as const, @@ -244,7 +314,7 @@ const comparisonFunctions: FunctionDefinition[] = [ }, { params: [ - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'left', type: 'string' as const, constantOnly: true }, { name: 'right', type: 'boolean' as const }, ], returnType: 'boolean' as const, @@ -274,7 +344,7 @@ const comparisonFunctions: FunctionDefinition[] = [ }, { params: [ - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'left', type: 'string' as const, constantOnly: true }, { name: 'right', type: 'boolean' as const }, ], returnType: 'boolean' as const, @@ -347,8 +417,15 @@ const likeFunctions: FunctionDefinition[] = [ signatures: [ { params: [ - { name: 'left', type: 'string' as const }, - { name: 'right', type: 'string' as const }, + { name: 'left', type: 'text' as const }, + { name: 'right', type: 'text' as const }, + ], + returnType: 'boolean', + }, + { + params: [ + { name: 'left', type: 'keyword' as const }, + { name: 'right', type: 'keyword' as const }, ], returnType: 'boolean', }, @@ -383,17 +460,24 @@ const inFunctions: FunctionDefinition[] = [ description, supportedCommands: ['eval', 'where', 'row', 'sort'], signatures: [ - { + ...ESQL_NUMBER_TYPES.map((type) => ({ params: [ - { name: 'left', type: 'number' }, + { name: 'left', type: type as FunctionParameterType }, + { name: 'right', type: 'any[]' as FunctionParameterType }, + ], + returnType: 'boolean' as FunctionReturnType, + })), + { + params: [ + { name: 'left', type: 'keyword' }, { name: 'right', type: 'any[]' }, ], returnType: 'boolean', }, { params: [ - { name: 'left', type: 'string' }, + { name: 'left', type: 'text' }, { name: 'right', type: 'any[]' }, ], returnType: 'boolean', diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts index 033518ac16c37..df0d5f02f8cf0 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts @@ -273,7 +273,7 @@ export const commandDefinitions: CommandDefinition[] = [ examples: ['… | limit 100', '… | limit 0'], signature: { multipleParams: false, - params: [{ name: 'size', type: 'number', constantOnly: true }], + params: [{ name: 'size', type: 'integer', constantOnly: true }], }, options: [], modes: [], @@ -390,6 +390,7 @@ export const commandDefinitions: CommandDefinition[] = [ signature: { multipleParams: false, params: [ + // innerType: 'string' is interpreted as keyword and text (see columnParamsWithInnerTypes) { name: 'column', type: 'column', innerType: 'string' }, { name: 'pattern', type: 'string', constantOnly: true }, ], @@ -407,6 +408,7 @@ export const commandDefinitions: CommandDefinition[] = [ signature: { multipleParams: false, params: [ + // innerType: 'string' is interpreted as keyword and text (see columnParamsWithInnerTypes) { name: 'column', type: 'column', innerType: 'string' }, { name: 'pattern', type: 'string', constantOnly: true }, ], diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts index a02a09757d033..3b9d9131e7643 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts @@ -43,11 +43,41 @@ const absDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -72,11 +102,41 @@ const acosDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -99,85 +159,56 @@ const asinDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=.9\n| EVAL asin=ASIN(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const atanDefinition: FunctionDefinition = { - type: 'eval', - name: 'atan', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan', { - defaultMessage: - 'Returns the arctangent of the input\nnumeric expression as an angle, expressed in radians.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'number', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=12.9\n| EVAL atan=ATAN(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const atan2Definition: FunctionDefinition = { - type: 'eval', - name: 'atan2', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan2', { - defaultMessage: - 'The angle between the positive x-axis and the ray from the\norigin to the point (x , y) in the Cartesian plane, expressed in radians.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'y_coordinate', - type: 'number', + name: 'number', + type: 'long', optional: false, }, + ], + returnType: 'double', + }, + { + params: [ { - name: 'x_coordinate', - type: 'number', + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW y=12.9, x=.6\n| EVAL atan2=ATAN2(y, x)'], + examples: ['ROW a=.9\n| EVAL asin=ASIN(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const cbrtDefinition: FunctionDefinition = { +const atanDefinition: FunctionDefinition = { type: 'eval', - name: 'cbrt', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cbrt', { + name: 'atan', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan', { defaultMessage: - 'Returns the cube root of a number. The input can be any numeric value, the return value is always a double.\nCube roots of infinities are null.', + 'Returns the arctangent of the input\nnumeric expression as an angle, expressed in radians.', }), alias: undefined, signatures: [ @@ -185,503 +216,1075 @@ const cbrtDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW d = 1000.0\n| EVAL c = cbrt(d)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const ceilDefinition: FunctionDefinition = { - type: 'eval', - name: 'ceil', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ceil', { - defaultMessage: 'Round a number up to the nearest integer.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'number', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=1.8\n| EVAL a=CEIL(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const cidrMatchDefinition: FunctionDefinition = { - type: 'eval', - name: 'cidr_match', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cidr_match', { - defaultMessage: - 'Returns true if the provided IP is contained in one of the provided CIDR blocks.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'ip', - type: 'ip', + name: 'number', + type: 'long', optional: false, }, + ], + returnType: 'double', + }, + { + params: [ { - name: 'blockX', - type: 'string', + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'boolean', - minParams: 2, + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'FROM hosts \n| WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") \n| KEEP card, host, ip0, ip1', - ], + examples: ['ROW a=12.9\n| EVAL atan=ATAN(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const coalesceDefinition: FunctionDefinition = { +const atan2Definition: FunctionDefinition = { type: 'eval', - name: 'coalesce', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.coalesce', { + name: 'atan2', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan2', { defaultMessage: - 'Returns the first of its arguments that is not null. If all arguments are null, it returns `null`.', + 'The angle between the positive x-axis and the ray from the\norigin to the point (x , y) in the Cartesian plane, expressed in radians.', }), alias: undefined, signatures: [ { params: [ { - name: 'first', - type: 'boolean', + name: 'y_coordinate', + type: 'double', + optional: false, + }, + { + name: 'x_coordinate', + type: 'double', optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'boolean', + name: 'y_coordinate', + type: 'double', optional: false, }, { - name: 'rest', - type: 'boolean', - optional: true, + name: 'x_coordinate', + type: 'integer', + optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'cartesian_point', + name: 'y_coordinate', + type: 'double', optional: false, }, { - name: 'rest', - type: 'cartesian_point', - optional: true, + name: 'x_coordinate', + type: 'long', + optional: false, }, ], - returnType: 'cartesian_point', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'cartesian_shape', + name: 'y_coordinate', + type: 'double', optional: false, }, { - name: 'rest', - type: 'cartesian_shape', - optional: true, + name: 'x_coordinate', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'cartesian_shape', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'date', + name: 'y_coordinate', + type: 'integer', optional: false, }, { - name: 'rest', - type: 'date', - optional: true, + name: 'x_coordinate', + type: 'double', + optional: false, }, ], - returnType: 'date', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'geo_point', + name: 'y_coordinate', + type: 'integer', optional: false, }, { - name: 'rest', - type: 'geo_point', - optional: true, + name: 'x_coordinate', + type: 'integer', + optional: false, }, ], - returnType: 'geo_point', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'geo_shape', + name: 'y_coordinate', + type: 'integer', optional: false, }, { - name: 'rest', - type: 'geo_shape', - optional: true, + name: 'x_coordinate', + type: 'long', + optional: false, }, ], - returnType: 'geo_shape', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'y_coordinate', + type: 'integer', + optional: false, + }, + { + name: 'x_coordinate', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'y_coordinate', + type: 'long', optional: false, }, { - name: 'rest', - type: 'number', - optional: true, + name: 'x_coordinate', + type: 'double', + optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'ip', + name: 'y_coordinate', + type: 'long', optional: false, }, { - name: 'rest', - type: 'ip', - optional: true, + name: 'x_coordinate', + type: 'integer', + optional: false, }, ], - returnType: 'ip', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'string', + name: 'y_coordinate', + type: 'long', + optional: false, + }, + { + name: 'x_coordinate', + type: 'long', optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'string', + name: 'y_coordinate', + type: 'long', optional: false, }, { - name: 'rest', - type: 'string', - optional: true, + name: 'x_coordinate', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'version', + name: 'y_coordinate', + type: 'unsigned_long', optional: false, }, { - name: 'rest', - type: 'version', - optional: true, + name: 'x_coordinate', + type: 'double', + optional: false, }, ], - returnType: 'version', - minParams: 1, + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=null, b="b"\n| EVAL COALESCE(a, b)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const concatDefinition: FunctionDefinition = { - type: 'eval', - name: 'concat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.concat', { - defaultMessage: 'Concatenates two or more strings.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string1', - type: 'string', + name: 'y_coordinate', + type: 'unsigned_long', optional: false, }, { - name: 'string2', - type: 'string', + name: 'x_coordinate', + type: 'integer', optional: false, }, ], - returnType: 'string', - minParams: 2, + returnType: 'double', + }, + { + params: [ + { + name: 'y_coordinate', + type: 'unsigned_long', + optional: false, + }, + { + name: 'x_coordinate', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'y_coordinate', + type: 'unsigned_long', + optional: false, + }, + { + name: 'x_coordinate', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'FROM employees\n| KEEP first_name, last_name\n| EVAL fullname = CONCAT(first_name, " ", last_name)', - ], + examples: ['ROW y=12.9, x=.6\n| EVAL atan2=ATAN2(y, x)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const cosDefinition: FunctionDefinition = { +const cbrtDefinition: FunctionDefinition = { type: 'eval', - name: 'cos', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cos', { - defaultMessage: 'Returns the cosine of an angle.', + name: 'cbrt', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cbrt', { + defaultMessage: + 'Returns the cube root of a number. The input can be any numeric value, the return value is always a double.\nCube roots of infinities are null.', }), alias: undefined, signatures: [ { params: [ { - name: 'angle', - type: 'number', + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=1.8 \n| EVAL cos=COS(a)'], + examples: ['ROW d = 1000.0\n| EVAL c = cbrt(d)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const coshDefinition: FunctionDefinition = { +const ceilDefinition: FunctionDefinition = { type: 'eval', - name: 'cosh', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cosh', { - defaultMessage: 'Returns the hyperbolic cosine of an angle.', + name: 'ceil', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ceil', { + defaultMessage: 'Round a number up to the nearest integer.', }), alias: undefined, signatures: [ { params: [ { - name: 'angle', - type: 'number', + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=1.8 \n| EVAL cosh=COSH(a)'], + examples: ['ROW a=1.8\n| EVAL a=CEIL(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateDiffDefinition: FunctionDefinition = { +const cidrMatchDefinition: FunctionDefinition = { type: 'eval', - name: 'date_diff', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_diff', { + name: 'cidr_match', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cidr_match', { defaultMessage: - 'Subtracts the `startTimestamp` from the `endTimestamp` and returns the difference in multiples of `unit`.\nIf `startTimestamp` is later than the `endTimestamp`, negative values are returned.', + 'Returns true if the provided IP is contained in one of the provided CIDR blocks.', }), alias: undefined, signatures: [ { params: [ { - name: 'unit', - type: 'string', + name: 'ip', + type: 'ip', optional: false, - literalOptions: [ - 'year', - 'years', - 'yy', - 'yyyy', - 'quarter', - 'quarters', - 'qq', - 'q', - 'month', - 'months', - 'mm', - 'm', - 'dayofyear', - 'dy', - 'y', - 'day', - 'days', - 'dd', - 'd', - 'week', - 'weeks', - 'wk', - 'ww', - 'weekday', - 'weekdays', - 'dw', - 'hour', - 'hours', - 'hh', - 'minute', - 'minutes', - 'mi', - 'n', - 'second', - 'seconds', - 'ss', - 's', - 'millisecond', - 'milliseconds', - 'ms', - 'microsecond', - 'microseconds', - 'mcs', - 'nanosecond', - 'nanoseconds', - 'ns', - ], - literalSuggestions: [ - 'year', - 'quarter', - 'month', - 'week', - 'day', - 'hour', - 'minute', - 'second', - 'millisecond', - 'microsecond', - 'nanosecond', - ], }, { - name: 'startTimestamp', - type: 'date', + name: 'blockX', + type: 'keyword', optional: false, }, + ], + returnType: 'boolean', + minParams: 2, + }, + { + params: [ { - name: 'endTimestamp', - type: 'date', + name: 'ip', + type: 'ip', + optional: false, + }, + { + name: 'blockX', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'boolean', + minParams: 2, }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z")\n| EVAL dd_ms = DATE_DIFF("microseconds", date1, date2)', + 'FROM hosts \n| WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") \n| KEEP card, host, ip0, ip1', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateExtractDefinition: FunctionDefinition = { +const coalesceDefinition: FunctionDefinition = { type: 'eval', - name: 'date_extract', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_extract', { - defaultMessage: 'Extracts parts of a date, like year, month, day, hour.', + name: 'coalesce', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.coalesce', { + defaultMessage: + 'Returns the first of its arguments that is not null. If all arguments are null, it returns `null`.', }), alias: undefined, signatures: [ { params: [ { - name: 'datePart', - type: 'string', + name: 'first', + type: 'boolean', optional: false, - literalOptions: [ - 'ALIGNED_DAY_OF_WEEK_IN_MONTH', - 'ALIGNED_DAY_OF_WEEK_IN_YEAR', - 'ALIGNED_WEEK_OF_MONTH', - 'ALIGNED_WEEK_OF_YEAR', - 'AMPM_OF_DAY', - 'CLOCK_HOUR_OF_AMPM', - 'CLOCK_HOUR_OF_DAY', - 'DAY_OF_MONTH', - 'DAY_OF_WEEK', - 'DAY_OF_YEAR', - 'EPOCH_DAY', + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_point', + optional: false, + }, + { + name: 'rest', + type: 'cartesian_point', + optional: true, + }, + ], + returnType: 'cartesian_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'rest', + type: 'cartesian_shape', + optional: true, + }, + ], + returnType: 'cartesian_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'date', + optional: false, + }, + { + name: 'rest', + type: 'date', + optional: true, + }, + ], + returnType: 'date', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_point', + optional: false, + }, + { + name: 'rest', + type: 'geo_point', + optional: true, + }, + ], + returnType: 'geo_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_shape', + optional: false, + }, + { + name: 'rest', + type: 'geo_shape', + optional: true, + }, + ], + returnType: 'geo_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + { + name: 'rest', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + { + name: 'rest', + type: 'keyword', + optional: true, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + { + name: 'rest', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + { + name: 'rest', + type: 'text', + optional: true, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=null, b="b"\n| EVAL COALESCE(a, b)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const concatDefinition: FunctionDefinition = { + type: 'eval', + name: 'concat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.concat', { + defaultMessage: 'Concatenates two or more strings.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + { + params: [ + { + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + { + params: [ + { + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + { + params: [ + { + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name\n| EVAL fullname = CONCAT(first_name, " ", last_name)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const cosDefinition: FunctionDefinition = { + type: 'eval', + name: 'cos', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cos', { + defaultMessage: 'Returns the cosine of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL cos=COS(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const coshDefinition: FunctionDefinition = { + type: 'eval', + name: 'cosh', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cosh', { + defaultMessage: 'Returns the hyperbolic cosine of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL cosh=COSH(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateDiffDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_diff', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_diff', { + defaultMessage: + 'Subtracts the `startTimestamp` from the `endTimestamp` and returns the difference in multiples of `unit`.\nIf `startTimestamp` is later than the `endTimestamp`, negative values are returned.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'unit', + type: 'keyword', + optional: false, + literalOptions: [ + 'year', + 'years', + 'yy', + 'yyyy', + 'quarter', + 'quarters', + 'qq', + 'q', + 'month', + 'months', + 'mm', + 'm', + 'dayofyear', + 'dy', + 'y', + 'day', + 'days', + 'dd', + 'd', + 'week', + 'weeks', + 'wk', + 'ww', + 'weekday', + 'weekdays', + 'dw', + 'hour', + 'hours', + 'hh', + 'minute', + 'minutes', + 'mi', + 'n', + 'second', + 'seconds', + 'ss', + 's', + 'millisecond', + 'milliseconds', + 'ms', + 'microsecond', + 'microseconds', + 'mcs', + 'nanosecond', + 'nanoseconds', + 'ns', + ], + literalSuggestions: [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + 'microsecond', + 'nanosecond', + ], + }, + { + name: 'startTimestamp', + type: 'date', + optional: false, + }, + { + name: 'endTimestamp', + type: 'date', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'unit', + type: 'text', + optional: false, + }, + { + name: 'startTimestamp', + type: 'date', + optional: false, + }, + { + name: 'endTimestamp', + type: 'date', + optional: false, + }, + ], + returnType: 'integer', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z")\n| EVAL dd_ms = DATE_DIFF("microseconds", date1, date2)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateExtractDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_extract', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_extract', { + defaultMessage: 'Extracts parts of a date, like year, month, day, hour.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'datePart', + type: 'keyword', + optional: false, + literalOptions: [ + 'ALIGNED_DAY_OF_WEEK_IN_MONTH', + 'ALIGNED_DAY_OF_WEEK_IN_YEAR', + 'ALIGNED_WEEK_OF_MONTH', + 'ALIGNED_WEEK_OF_YEAR', + 'AMPM_OF_DAY', + 'CLOCK_HOUR_OF_AMPM', + 'CLOCK_HOUR_OF_DAY', + 'DAY_OF_MONTH', + 'DAY_OF_WEEK', + 'DAY_OF_YEAR', + 'EPOCH_DAY', 'ERA', 'HOUR_OF_AMPM', 'HOUR_OF_DAY', @@ -704,842 +1307,2528 @@ const dateExtractDefinition: FunctionDefinition = { ], }, { - name: 'date', - type: 'date', + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'datePart', + type: 'text', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'long', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06")\n| EVAL year = DATE_EXTRACT("year", date)', + 'FROM sample_data\n| WHERE DATE_EXTRACT("hour_of_day", @timestamp) < 9 AND DATE_EXTRACT("hour_of_day", @timestamp) >= 17', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateFormatDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_format', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_format', { + defaultMessage: 'Returns a string representation of a date, in the provided format.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'dateFormat', + type: 'keyword', + optional: true, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'dateFormat', + type: 'text', + optional: true, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'keyword', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateParseDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_parse', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_parse', { + defaultMessage: + 'Returns a date by parsing the second argument using the format specified in the first argument.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'datePattern', + type: 'keyword', + optional: true, + }, + { + name: 'dateString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'datePattern', + type: 'keyword', + optional: true, + }, + { + name: 'dateString', + type: 'text', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'datePattern', + type: 'text', + optional: true, + }, + { + name: 'dateString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'datePattern', + type: 'text', + optional: true, + }, + { + name: 'dateString', + type: 'text', + optional: false, + }, + ], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW date_string = "2022-05-06"\n| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateTruncDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_trunc', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_trunc', { + defaultMessage: 'Rounds down a date to the closest interval.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'interval', + type: 'time_literal', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'interval', + type: 'time_duration', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL year_hired = DATE_TRUNC(1 year, hire_date)', + 'FROM employees\n| EVAL year = DATE_TRUNC(1 year, hire_date)\n| STATS hires = COUNT(emp_no) BY year\n| SORT year', + 'FROM sample_data\n| EVAL error = CASE(message LIKE "*error*", 1, 0)\n| EVAL hour = DATE_TRUNC(1 hour, @timestamp)\n| STATS error_rate = AVG(error) by hour\n| SORT hour', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const eDefinition: FunctionDefinition = { + type: 'eval', + name: 'e', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.e', { + defaultMessage: "Returns Euler's number.", + }), + alias: undefined, + signatures: [ + { + params: [], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW E()'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const endsWithDefinition: FunctionDefinition = { + type: 'eval', + name: 'ends_with', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ends_with', { + defaultMessage: + 'Returns a boolean that indicates whether a keyword string ends with another string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'str', + type: 'keyword', + optional: false, + }, + { + name: 'suffix', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'str', + type: 'text', + optional: false, + }, + { + name: 'suffix', + type: 'text', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['FROM employees\n| KEEP last_name\n| EVAL ln_E = ENDS_WITH(last_name, "d")'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const expDefinition: FunctionDefinition = { + type: 'eval', + name: 'exp', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.exp', { + defaultMessage: 'Returns the value of e raised to the power of the given number.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW d = 5.0\n| EVAL s = EXP(d)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const floorDefinition: FunctionDefinition = { + type: 'eval', + name: 'floor', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.floor', { + defaultMessage: 'Round a number down to the nearest integer.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8\n| EVAL a=FLOOR(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const fromBase64Definition: FunctionDefinition = { + type: 'eval', + name: 'from_base64', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.from_base64', { + defaultMessage: 'Decode a base64 string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['row a = "ZWxhc3RpYw==" \n| eval d = from_base64(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const greatestDefinition: FunctionDefinition = { + type: 'eval', + name: 'greatest', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.greatest', { + defaultMessage: + 'Returns the maximum value from multiple columns. This is similar to `MV_MAX`\nexcept it is intended to run on multiple columns at once.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'double', + optional: false, + }, + { + name: 'rest', + type: 'double', + optional: true, + }, + ], + returnType: 'double', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + { + name: 'rest', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + { + name: 'rest', + type: 'keyword', + optional: true, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + { + name: 'rest', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + { + name: 'rest', + type: 'text', + optional: true, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a = 10, b = 20\n| EVAL g = GREATEST(a, b)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const ipPrefixDefinition: FunctionDefinition = { + type: 'eval', + name: 'ip_prefix', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ip_prefix', { + defaultMessage: 'Truncates an IP to a given prefix length.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'ip', + type: 'ip', + optional: false, + }, + { + name: 'prefixLengthV4', + type: 'integer', + optional: false, + }, + { + name: 'prefixLengthV6', + type: 'integer', + optional: false, + }, + ], + returnType: 'ip', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'row ip4 = to_ip("1.2.3.4"), ip6 = to_ip("fe80::cae2:65ff:fece:feb9")\n| eval ip4_prefix = ip_prefix(ip4, 24, 0), ip6_prefix = ip_prefix(ip6, 0, 112);', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const leastDefinition: FunctionDefinition = { + type: 'eval', + name: 'least', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.least', { + defaultMessage: + 'Returns the minimum value from multiple columns. This is similar to `MV_MIN` except it is intended to run on multiple columns at once.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'double', + optional: false, + }, + { + name: 'rest', + type: 'double', + optional: true, + }, + ], + returnType: 'double', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + { + name: 'rest', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + { + name: 'rest', + type: 'keyword', + optional: true, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + { + name: 'rest', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + { + name: 'rest', + type: 'text', + optional: true, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a = 10, b = 20\n| EVAL l = LEAST(a, b)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const leftDefinition: FunctionDefinition = { + type: 'eval', + name: 'left', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.left', { + defaultMessage: + "Returns the substring that extracts 'length' chars from 'string' starting from the left.", + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP last_name\n| EVAL left = LEFT(last_name, 3)\n| SORT last_name ASC\n| LIMIT 5', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const lengthDefinition: FunctionDefinition = { + type: 'eval', + name: 'length', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.length', { + defaultMessage: 'Returns the character length of a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['FROM employees\n| KEEP first_name, last_name\n| EVAL fn_length = LENGTH(first_name)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const locateDefinition: FunctionDefinition = { + type: 'eval', + name: 'locate', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.locate', { + defaultMessage: + 'Returns an integer that indicates the position of a keyword substring within another string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['row a = "hello"\n| eval a_ll = locate(a, "ll")'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const logDefinition: FunctionDefinition = { + type: 'eval', + name: 'log', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log', { + defaultMessage: + 'Returns the logarithm of a value to a base. The input can be any numeric value, the return value is always a double.\n\nLogs of zero, negative numbers, and base of one return `null` as well as a warning.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: (fnDef: ESQLFunction) => { + const messages = []; + // do not really care here about the base and field + // just need to check both values are not negative + for (const arg of fnDef.args) { + if (isLiteralItem(arg) && Number(arg.value) < 0) { + messages.push({ + type: 'warning' as const, + code: 'logOfNegativeValue', + text: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', + { + defaultMessage: 'Log of a negative number results in null: {value}', + values: { + value: arg.value, + }, + } + ), + location: arg.location, + }); + } + } + return messages; + }, + examples: [ + 'ROW base = 2.0, value = 8.0\n| EVAL s = LOG(base, value)', + 'row value = 100\n| EVAL s = LOG(value);', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const log10Definition: FunctionDefinition = { + type: 'eval', + name: 'log10', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log10', { + defaultMessage: + 'Returns the logarithm of a value to base 10. The input can be any numeric value, the return value is always a double.\n\nLogs of 0 and negative numbers return `null` as well as a warning.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: (fnDef: ESQLFunction) => { + const messages = []; + // do not really care here about the base and field + // just need to check both values are not negative + for (const arg of fnDef.args) { + if (isLiteralItem(arg) && Number(arg.value) < 0) { + messages.push({ + type: 'warning' as const, + code: 'logOfNegativeValue', + text: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', + { + defaultMessage: 'Log of a negative number results in null: {value}', + values: { + value: arg.value, + }, + } + ), + location: arg.location, + }); + } + } + return messages; + }, + examples: ['ROW d = 1000.0 \n| EVAL s = LOG10(d)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const ltrimDefinition: FunctionDefinition = { + type: 'eval', + name: 'ltrim', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ltrim', { + defaultMessage: 'Removes leading whitespaces from a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW message = " some text ", color = " red "\n| EVAL message = LTRIM(message)\n| EVAL color = LTRIM(color)\n| EVAL message = CONCAT("\'", message, "\'")\n| EVAL color = CONCAT("\'", color, "\'")', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const mvAppendDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_append', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_append', { + defaultMessage: 'Concatenates values of two multi-value fields.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field1', + type: 'boolean', + optional: false, + }, + { + name: 'field2', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field1', + type: 'cartesian_point', + optional: false, + }, + { + name: 'field2', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field1', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'field2', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field1', + type: 'date', + optional: false, + }, + { + name: 'field2', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field1', + type: 'double', + optional: false, + }, + { + name: 'field2', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field1', + type: 'geo_point', + optional: false, + }, + { + name: 'field2', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field1', + type: 'geo_shape', + optional: false, + }, + { + name: 'field2', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field1', + type: 'integer', + optional: false, + }, + { + name: 'field2', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field1', + type: 'ip', + optional: false, + }, + { + name: 'field2', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field1', + type: 'keyword', + optional: false, + }, + { + name: 'field2', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06")\n| EVAL year = DATE_EXTRACT("year", date)', - 'FROM sample_data\n| WHERE DATE_EXTRACT("hour_of_day", @timestamp) < 9 AND DATE_EXTRACT("hour_of_day", @timestamp) >= 17', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateFormatDefinition: FunctionDefinition = { - type: 'eval', - name: 'date_format', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_format', { - defaultMessage: 'Returns a string representation of a date, in the provided format.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'dateFormat', - type: 'string', - optional: true, + name: 'field1', + type: 'long', + optional: false, }, { - name: 'date', - type: 'date', + name: 'field2', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field1', + type: 'text', + optional: false, + }, + { + name: 'field2', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + }, + { + params: [ + { + name: 'field1', + type: 'version', + optional: false, + }, + { + name: 'field2', + type: 'version', optional: false, }, ], - returnType: 'string', + returnType: 'version', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date)', - ], + examples: [], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateParseDefinition: FunctionDefinition = { +const mvAvgDefinition: FunctionDefinition = { type: 'eval', - name: 'date_parse', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_parse', { + name: 'mv_avg', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_avg', { defaultMessage: - 'Returns a date by parsing the second argument using the format specified in the first argument.', + 'Converts a multivalued field into a single valued field containing the average of all of the values.', }), alias: undefined, signatures: [ { params: [ { - name: 'datePattern', - type: 'string', - optional: true, + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, }, + ], + returnType: 'double', + }, + { + params: [ { - name: 'dateString', - type: 'string', + name: 'number', + type: 'long', optional: false, }, ], - returnType: 'date', + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW date_string = "2022-05-06"\n| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string)'], + examples: ['ROW a=[3, 5, 1, 6]\n| EVAL avg_a = MV_AVG(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateTruncDefinition: FunctionDefinition = { +const mvConcatDefinition: FunctionDefinition = { type: 'eval', - name: 'date_trunc', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_trunc', { - defaultMessage: 'Rounds down a date to the closest interval.', + name: 'mv_concat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_concat', { + defaultMessage: + 'Converts a multivalued string expression into a single valued column containing the concatenation of all values separated by a delimiter.', }), alias: undefined, signatures: [ { params: [ { - name: 'interval', - type: 'time_literal', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'date', - type: 'date', + name: 'delim', + type: 'keyword', optional: false, }, ], - returnType: 'date', + returnType: 'keyword', }, { params: [ { - name: 'interval', - type: 'date', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'date', - type: 'date', + name: 'delim', + type: 'text', optional: false, }, ], - returnType: 'date', + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL year_hired = DATE_TRUNC(1 year, hire_date)', - 'FROM employees\n| EVAL year = DATE_TRUNC(1 year, hire_date)\n| STATS hires = COUNT(emp_no) BY year\n| SORT year', - 'FROM sample_data\n| EVAL error = CASE(message LIKE "*error*", 1, 0)\n| EVAL hour = DATE_TRUNC(1 hour, @timestamp)\n| STATS error_rate = AVG(error) by hour\n| SORT hour', + 'ROW a=["foo", "zoo", "bar"]\n| EVAL j = MV_CONCAT(a, ", ")', + 'ROW a=[10, 9, 8]\n| EVAL j = MV_CONCAT(TO_STRING(a), ", ")', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const eDefinition: FunctionDefinition = { +const mvCountDefinition: FunctionDefinition = { type: 'eval', - name: 'e', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.e', { - defaultMessage: "Returns Euler's number.", + name: 'mv_count', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_count', { + defaultMessage: + 'Converts a multivalued expression into a single valued column containing a count of the number of values.', }), alias: undefined, signatures: [ { - params: [], - returnType: 'number', + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW E()'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const endsWithDefinition: FunctionDefinition = { - type: 'eval', - name: 'ends_with', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ends_with', { - defaultMessage: - 'Returns a boolean that indicates whether a keyword string ends with another string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'str', - type: 'string', + name: 'field', + type: 'keyword', optional: false, }, + ], + returnType: 'integer', + }, + { + params: [ { - name: 'suffix', - type: 'string', + name: 'field', + type: 'long', optional: false, }, ], - returnType: 'boolean', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['FROM employees\n| KEEP last_name\n| EVAL ln_E = ENDS_WITH(last_name, "d")'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const expDefinition: FunctionDefinition = { - type: 'eval', - name: 'exp', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.exp', { - defaultMessage: 'Returns the value of e raised to the power of the given number.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW d = 5.0\n| EVAL s = EXP(d)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const floorDefinition: FunctionDefinition = { - type: 'eval', - name: 'floor', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.floor', { - defaultMessage: 'Round a number down to the nearest integer.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=1.8\n| EVAL a=FLOOR(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const fromBase64Definition: FunctionDefinition = { - type: 'eval', - name: 'from_base64', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.from_base64', { - defaultMessage: 'Decode a base64 string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'version', optional: false, }, ], - returnType: 'string', + returnType: 'integer', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['row a = "ZWxhc3RpYw==" \n| eval d = from_base64(a)'], + examples: ['ROW a=["foo", "zoo", "bar"]\n| EVAL count_a = MV_COUNT(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const greatestDefinition: FunctionDefinition = { +const mvDedupeDefinition: FunctionDefinition = { type: 'eval', - name: 'greatest', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.greatest', { - defaultMessage: - 'Returns the maximum value from multiple columns. This is similar to `MV_MAX`\nexcept it is intended to run on multiple columns at once.', + name: 'mv_dedupe', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_dedupe', { + defaultMessage: 'Remove duplicate values from a multivalued field.', }), alias: undefined, signatures: [ { params: [ { - name: 'first', + name: 'field', type: 'boolean', optional: false, }, ], returnType: 'boolean', - minParams: 1, }, { params: [ { - name: 'first', - type: 'boolean', + name: 'field', + type: 'cartesian_point', optional: false, }, + ], + returnType: 'cartesian_point', + }, + { + params: [ { - name: 'rest', - type: 'boolean', - optional: true, + name: 'field', + type: 'cartesian_shape', + optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'cartesian_shape', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'date', optional: false, }, + ], + returnType: 'date', + }, + { + params: [ { - name: 'rest', - type: 'number', - optional: true, + name: 'field', + type: 'double', + optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'geo_point', optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'geo_point', }, { params: [ { - name: 'first', - type: 'ip', + name: 'field', + type: 'geo_shape', optional: false, }, + ], + returnType: 'geo_shape', + }, + { + params: [ { - name: 'rest', - type: 'ip', - optional: true, + name: 'field', + type: 'integer', + optional: false, }, ], - returnType: 'ip', - minParams: 1, + returnType: 'integer', }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'ip', optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'ip', }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'keyword', optional: false, }, + ], + returnType: 'keyword', + }, + { + params: [ { - name: 'rest', - type: 'string', - optional: true, + name: 'field', + type: 'long', + optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'long', }, { params: [ { - name: 'first', - type: 'version', + name: 'field', + type: 'text', optional: false, }, + ], + returnType: 'text', + }, + { + params: [ { - name: 'rest', + name: 'field', type: 'version', - optional: true, + optional: false, }, ], returnType: 'version', - minParams: 1, }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a = 10, b = 20\n| EVAL g = GREATEST(a, b)'], + examples: ['ROW a=["foo", "foo", "bar", "foo"]\n| EVAL dedupe_a = MV_DEDUPE(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const ipPrefixDefinition: FunctionDefinition = { +const mvFirstDefinition: FunctionDefinition = { type: 'eval', - name: 'ip_prefix', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ip_prefix', { - defaultMessage: 'Truncates an IP to a given prefix length.', + name: 'mv_first', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_first', { + defaultMessage: + "Converts a multivalued expression into a single valued column containing the\nfirst value. This is most useful when reading from a function that emits\nmultivalued columns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the minimum value use `MV_MIN` instead of\n`MV_FIRST`. `MV_MIN` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_FIRST`.", }), alias: undefined, signatures: [ { params: [ { - name: 'ip', - type: 'ip', + name: 'field', + type: 'boolean', optional: false, }, + ], + returnType: 'boolean', + }, + { + params: [ { - name: 'prefixLengthV4', - type: 'number', + name: 'field', + type: 'cartesian_point', optional: false, }, + ], + returnType: 'cartesian_point', + }, + { + params: [ { - name: 'prefixLengthV6', - type: 'number', + name: 'field', + type: 'cartesian_shape', optional: false, }, ], - returnType: 'ip', + returnType: 'cartesian_shape', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'row ip4 = to_ip("1.2.3.4"), ip6 = to_ip("fe80::cae2:65ff:fece:feb9")\n| eval ip4_prefix = ip_prefix(ip4, 24, 0), ip6_prefix = ip_prefix(ip6, 0, 112);', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const leastDefinition: FunctionDefinition = { - type: 'eval', - name: 'least', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.least', { - defaultMessage: - 'Returns the minimum value from multiple columns. This is similar to `MV_MIN` except it is intended to run on multiple columns at once.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'first', - type: 'boolean', + name: 'field', + type: 'date', optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'date', }, { params: [ { - name: 'first', - type: 'boolean', + name: 'field', + type: 'double', optional: false, }, - { - name: 'rest', - type: 'boolean', - optional: true, - }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'geo_point', optional: false, }, - { - name: 'rest', - type: 'number', - optional: true, - }, ], - returnType: 'number', - minParams: 1, + returnType: 'geo_point', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'geo_shape', optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'geo_shape', }, { params: [ { - name: 'first', - type: 'ip', + name: 'field', + type: 'integer', optional: false, }, + ], + returnType: 'integer', + }, + { + params: [ { - name: 'rest', + name: 'field', type: 'ip', - optional: true, + optional: false, }, ], returnType: 'ip', - minParams: 1, }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'keyword', optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'keyword', }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'long', optional: false, }, + ], + returnType: 'long', + }, + { + params: [ { - name: 'rest', - type: 'string', - optional: true, + name: 'field', + type: 'text', + optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'text', }, { params: [ { - name: 'first', - type: 'version', + name: 'field', + type: 'unsigned_long', optional: false, }, + ], + returnType: 'unsigned_long', + }, + { + params: [ { - name: 'rest', + name: 'field', type: 'version', - optional: true, + optional: false, }, ], returnType: 'version', - minParams: 1, }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a = 10, b = 20\n| EVAL l = LEAST(a, b)'], + examples: ['ROW a="foo;bar;baz"\n| EVAL first_a = MV_FIRST(SPLIT(a, ";"))'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const leftDefinition: FunctionDefinition = { +const mvLastDefinition: FunctionDefinition = { type: 'eval', - name: 'left', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.left', { + name: 'mv_last', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_last', { defaultMessage: - "Returns the substring that extracts 'length' chars from 'string' starting from the left.", + "Converts a multivalue expression into a single valued column containing the last\nvalue. This is most useful when reading from a function that emits multivalued\ncolumns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the maximum value use `MV_MAX` instead of\n`MV_LAST`. `MV_MAX` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_LAST`.", }), alias: undefined, signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'boolean', optional: false, }, + ], + returnType: 'boolean', + }, + { + params: [ { - name: 'length', - type: 'number', + name: 'field', + type: 'cartesian_point', optional: false, }, ], - returnType: 'string', + returnType: 'cartesian_point', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'FROM employees\n| KEEP last_name\n| EVAL left = LEFT(last_name, 3)\n| SORT last_name ASC\n| LIMIT 5', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const lengthDefinition: FunctionDefinition = { - type: 'eval', - name: 'length', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.length', { - defaultMessage: 'Returns the character length of a string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'cartesian_shape', optional: false, }, ], - returnType: 'number', + returnType: 'cartesian_shape', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['FROM employees\n| KEEP first_name, last_name\n| EVAL fn_length = LENGTH(first_name)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const locateDefinition: FunctionDefinition = { - type: 'eval', - name: 'locate', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.locate', { - defaultMessage: - 'Returns an integer that indicates the position of a keyword substring within another string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'date', optional: false, }, + ], + returnType: 'date', + }, + { + params: [ { - name: 'substring', - type: 'string', + name: 'field', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'geo_point', optional: false, }, + ], + returnType: 'geo_point', + }, + { + params: [ { - name: 'substring', - type: 'string', + name: 'field', + type: 'geo_shape', optional: false, }, + ], + returnType: 'geo_shape', + }, + { + params: [ { - name: 'start', - type: 'number', - optional: true, + name: 'field', + type: 'integer', + optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['row a = "hello"\n| eval a_ll = locate(a, "ll")'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const logDefinition: FunctionDefinition = { - type: 'eval', - name: 'log', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log', { - defaultMessage: - 'Returns the logarithm of a value to a base. The input can be any numeric value, the return value is always a double.\n\nLogs of zero, negative numbers, and base of one return `null` as well as a warning.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'base', - type: 'number', - optional: true, + name: 'field', + type: 'ip', + optional: false, }, ], - returnType: 'number', + returnType: 'ip', }, { params: [ { - name: 'base', - type: 'number', - optional: true, + name: 'field', + type: 'keyword', + optional: false, }, + ], + returnType: 'keyword', + }, + { + params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: (fnDef: ESQLFunction) => { - const messages = []; - // do not really care here about the base and field - // just need to check both values are not negative - for (const arg of fnDef.args) { - if (isLiteralItem(arg) && Number(arg.value) < 0) { - messages.push({ - type: 'warning' as const, - code: 'logOfNegativeValue', - text: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', - { - defaultMessage: 'Log of a negative number results in null: {value}', - values: { - value: arg.value, - }, - } - ), - location: arg.location, - }); - } - } - return messages; - }, - examples: [ - 'ROW base = 2.0, value = 8.0\n| EVAL s = LOG(base, value)', - 'row value = 100\n| EVAL s = LOG(value);', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const log10Definition: FunctionDefinition = { - type: 'eval', - name: 'log10', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log10', { - defaultMessage: - 'Returns the logarithm of a value to base 10. The input can be any numeric value, the return value is always a double.\n\nLogs of 0 and negative numbers return `null` as well as a warning.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'text', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: (fnDef: ESQLFunction) => { - const messages = []; - // do not really care here about the base and field - // just need to check both values are not negative - for (const arg of fnDef.args) { - if (isLiteralItem(arg) && Number(arg.value) < 0) { - messages.push({ - type: 'warning' as const, - code: 'logOfNegativeValue', - text: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', - { - defaultMessage: 'Log of a negative number results in null: {value}', - values: { - value: arg.value, - }, - } - ), - location: arg.location, - }); - } - } - return messages; - }, - examples: ['ROW d = 1000.0 \n| EVAL s = LOG10(d)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const ltrimDefinition: FunctionDefinition = { - type: 'eval', - name: 'ltrim', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ltrim', { - defaultMessage: 'Removes leading whitespaces from a string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'version', optional: false, }, ], - returnType: 'string', + returnType: 'version', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'ROW message = " some text ", color = " red "\n| EVAL message = LTRIM(message)\n| EVAL color = LTRIM(color)\n| EVAL message = CONCAT("\'", message, "\'")\n| EVAL color = CONCAT("\'", color, "\'")', - ], + examples: ['ROW a="foo;bar;baz"\n| EVAL last_a = MV_LAST(SPLIT(a, ";"))'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvAppendDefinition: FunctionDefinition = { +const mvMaxDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_append', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_append', { - defaultMessage: 'Concatenates values of two multi-value fields.', + name: 'mv_max', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_max', { + defaultMessage: + 'Converts a multivalued expression into a single valued column containing the maximum value.', }), alias: undefined, signatures: [ { params: [ { - name: 'field1', - type: 'boolean', - optional: false, - }, - { - name: 'field2', + name: 'field', type: 'boolean', optional: false, }, @@ -1549,132 +3838,87 @@ const mvAppendDefinition: FunctionDefinition = { { params: [ { - name: 'field1', - type: 'cartesian_point', - optional: false, - }, - { - name: 'field2', - type: 'cartesian_point', + name: 'field', + type: 'date', optional: false, }, ], - returnType: 'cartesian_point', + returnType: 'date', }, { params: [ { - name: 'field1', - type: 'cartesian_shape', - optional: false, - }, - { - name: 'field2', - type: 'cartesian_shape', + name: 'field', + type: 'double', optional: false, }, ], - returnType: 'cartesian_shape', + returnType: 'double', }, { params: [ { - name: 'field1', - type: 'date', - optional: false, - }, - { - name: 'field2', - type: 'date', + name: 'field', + type: 'integer', optional: false, }, ], - returnType: 'date', + returnType: 'integer', }, { params: [ { - name: 'field1', - type: 'number', - optional: false, - }, - { - name: 'field2', - type: 'number', + name: 'field', + type: 'ip', optional: false, }, ], - returnType: 'number', + returnType: 'ip', }, { params: [ { - name: 'field1', - type: 'geo_point', - optional: false, - }, - { - name: 'field2', - type: 'geo_point', + name: 'field', + type: 'keyword', optional: false, }, ], - returnType: 'geo_point', + returnType: 'keyword', }, { params: [ { - name: 'field1', - type: 'geo_shape', - optional: false, - }, - { - name: 'field2', - type: 'geo_shape', + name: 'field', + type: 'long', optional: false, }, ], - returnType: 'geo_shape', + returnType: 'long', }, { params: [ { - name: 'field1', - type: 'ip', - optional: false, - }, - { - name: 'field2', - type: 'ip', + name: 'field', + type: 'text', optional: false, }, ], - returnType: 'ip', + returnType: 'text', }, { params: [ { - name: 'field1', - type: 'string', - optional: false, - }, - { - name: 'field2', - type: 'string', + name: 'field', + type: 'unsigned_long', optional: false, }, ], - returnType: 'string', + returnType: 'unsigned_long', }, { params: [ { - name: 'field1', - type: 'version', - optional: false, - }, - { - name: 'field2', + name: 'field', type: 'version', optional: false, }, @@ -1685,16 +3929,19 @@ const mvAppendDefinition: FunctionDefinition = { supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [], + examples: [ + 'ROW a=[3, 5, 1]\n| EVAL max_a = MV_MAX(a)', + 'ROW a=["foo", "zoo", "bar"]\n| EVAL max_a = MV_MAX(a)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvAvgDefinition: FunctionDefinition = { +const mvMedianDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_avg', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_avg', { + name: 'mv_median', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_median', { defaultMessage: - 'Converts a multivalued field into a single valued field containing the average of all of the values.', + 'Converts a multivalued field into a single valued field containing the median value.', }), alias: undefined, signatures: [ @@ -1702,61 +3949,59 @@ const mvAvgDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=[3, 5, 1, 6]\n| EVAL avg_a = MV_AVG(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvConcatDefinition: FunctionDefinition = { - type: 'eval', - name: 'mv_concat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_concat', { - defaultMessage: - 'Converts a multivalued string expression into a single valued column containing the concatenation of all values separated by a delimiter.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'number', + type: 'integer', optional: false, }, + ], + returnType: 'integer', + }, + { + params: [ { - name: 'delim', - type: 'string', + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'string', + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'ROW a=["foo", "zoo", "bar"]\n| EVAL j = MV_CONCAT(a, ", ")', - 'ROW a=[10, 9, 8]\n| EVAL j = MV_CONCAT(TO_STRING(a), ", ")', + 'ROW a=[3, 5, 1]\n| EVAL median_a = MV_MEDIAN(a)', + 'ROW a=[3, 7, 1, 6]\n| EVAL median_a = MV_MEDIAN(a)', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvCountDefinition: FunctionDefinition = { +const mvMinDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_count', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_count', { + name: 'mv_min', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_min', { defaultMessage: - 'Converts a multivalued expression into a single valued column containing a count of the number of values.', + 'Converts a multivalued expression into a single valued column containing the minimum value.', }), alias: undefined, signatures: [ @@ -1768,87 +4013,87 @@ const mvCountDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'boolean', }, { params: [ { name: 'field', - type: 'cartesian_point', + type: 'date', optional: false, }, ], - returnType: 'number', + returnType: 'date', }, { params: [ { name: 'field', - type: 'cartesian_shape', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'date', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'number', + type: 'ip', optional: false, }, ], - returnType: 'number', + returnType: 'ip', }, { params: [ { name: 'field', - type: 'geo_point', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'geo_shape', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, { params: [ { name: 'field', - type: 'ip', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'text', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, { params: [ @@ -1858,21 +4103,25 @@ const mvCountDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'version', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=["foo", "zoo", "bar"]\n| EVAL count_a = MV_COUNT(a)'], + examples: [ + 'ROW a=[2, 1]\n| EVAL min_a = MV_MIN(a)', + 'ROW a=["foo", "bar"]\n| EVAL min_a = MV_MIN(a)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvDedupeDefinition: FunctionDefinition = { +const mvSliceDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_dedupe', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_dedupe', { - defaultMessage: 'Remove duplicate values from a multivalued field.', + name: 'mv_slice', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_slice', { + defaultMessage: + 'Returns a subset of the multivalued field using the start and end index values.', }), alias: undefined, signatures: [ @@ -1883,6 +4132,16 @@ const mvDedupeDefinition: FunctionDefinition = { type: 'boolean', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], returnType: 'boolean', }, @@ -1893,78 +4152,218 @@ const mvDedupeDefinition: FunctionDefinition = { type: 'cartesian_point', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'cartesian_point', + returnType: 'geo_point', }, { params: [ { name: 'field', - type: 'cartesian_shape', + type: 'geo_shape', optional: false, }, - ], - returnType: 'cartesian_shape', - }, - { - params: [ { - name: 'field', - type: 'date', + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'date', + returnType: 'geo_shape', }, { params: [ { name: 'field', - type: 'number', + type: 'integer', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'geo_point', + type: 'ip', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'geo_point', + returnType: 'ip', }, { params: [ { name: 'field', - type: 'geo_shape', + type: 'keyword', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'geo_shape', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'ip', + type: 'long', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'ip', + returnType: 'long', }, { params: [ { name: 'field', - type: 'string', + type: 'text', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'string', + returnType: 'text', }, { params: [ @@ -1973,6 +4372,16 @@ const mvDedupeDefinition: FunctionDefinition = { type: 'version', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], returnType: 'version', }, @@ -1980,16 +4389,18 @@ const mvDedupeDefinition: FunctionDefinition = { supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=["foo", "foo", "bar", "foo"]\n| EVAL dedupe_a = MV_DEDUPE(a)'], + examples: [ + 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3)', + 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, -2), a2 = mv_slice(a, -3, -1)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvFirstDefinition: FunctionDefinition = { +const mvSortDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_first', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_first', { - defaultMessage: - "Converts a multivalued expression into a single valued column containing the\nfirst value. This is most useful when reading from a function that emits\nmultivalued columns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the minimum value use `MV_MIN` instead of\n`MV_FIRST`. `MV_MIN` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_FIRST`.", + name: 'mv_sort', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sort', { + defaultMessage: 'Sorts a multivalued field in lexicographical order.', }), alias: undefined, signatures: [ @@ -2000,6 +4411,12 @@ const mvFirstDefinition: FunctionDefinition = { type: 'boolean', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], returnType: 'boolean', }, @@ -2007,81 +4424,113 @@ const mvFirstDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'cartesian_point', + type: 'date', optional: false, }, - ], - returnType: 'cartesian_point', - }, - { - params: [ { - name: 'field', - type: 'cartesian_shape', - optional: false, + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], }, ], - returnType: 'cartesian_shape', + returnType: 'date', }, { params: [ { name: 'field', - type: 'date', + type: 'double', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'date', + returnType: 'double', }, { params: [ { name: 'field', - type: 'number', + type: 'integer', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'geo_point', + type: 'ip', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'geo_point', + returnType: 'ip', }, { params: [ { name: 'field', - type: 'geo_shape', + type: 'keyword', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'geo_shape', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'ip', + type: 'long', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'ip', + returnType: 'long', }, { params: [ { name: 'field', - type: 'string', + type: 'text', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'string', + returnType: 'text', }, { params: [ @@ -2090,6 +4539,12 @@ const mvFirstDefinition: FunctionDefinition = { type: 'version', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], returnType: 'version', }, @@ -2097,864 +4552,820 @@ const mvFirstDefinition: FunctionDefinition = { supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a="foo;bar;baz"\n| EVAL first_a = MV_FIRST(SPLIT(a, ";"))'], + examples: ['ROW a = [4, 2, -3, 2]\n| EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC")'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvLastDefinition: FunctionDefinition = { +const mvSumDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_last', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_last', { + name: 'mv_sum', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sum', { defaultMessage: - "Converts a multivalue expression into a single valued column containing the last\nvalue. This is most useful when reading from a function that emits multivalued\ncolumns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the maximum value use `MV_MAX` instead of\n`MV_LAST`. `MV_MAX` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_LAST`.", + 'Converts a multivalued field into a single valued field containing the sum of all of the values.', }), alias: undefined, signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'number', + type: 'double', optional: false, }, ], - returnType: 'boolean', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'cartesian_point', + name: 'number', + type: 'integer', optional: false, }, ], - returnType: 'cartesian_point', + returnType: 'integer', }, { params: [ { - name: 'field', - type: 'cartesian_shape', + name: 'number', + type: 'long', optional: false, }, ], - returnType: 'cartesian_shape', + returnType: 'long', }, { params: [ { - name: 'field', - type: 'date', + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'date', + returnType: 'unsigned_long', }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=[3, 5, 6]\n| EVAL sum_a = MV_SUM(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const mvZipDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_zip', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_zip', { + defaultMessage: + 'Combines the values from two multivalued fields with a delimiter that joins them together.', + }), + alias: undefined, + signatures: [ { params: [ { - name: 'field', - type: 'number', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'geo_point', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'geo_point', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'geo_shape', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'geo_shape', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'ip', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, ], - returnType: 'ip', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'string', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'version', + name: 'string1', + type: 'keyword', optional: false, }, + { + name: 'string2', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'version', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a="foo;bar;baz"\n| EVAL last_a = MV_LAST(SPLIT(a, ";"))'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvMaxDefinition: FunctionDefinition = { - type: 'eval', - name: 'mv_max', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_max', { - defaultMessage: - 'Converts a multivalued expression into a single valued column containing the maximum value.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, ], - returnType: 'boolean', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'date', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'date', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'number', + name: 'string1', + type: 'text', optional: false, }, + { + name: 'string2', + type: 'keyword', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'number', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'ip', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, ], - returnType: 'ip', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'string', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'version', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'version', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'ROW a=[3, 5, 1]\n| EVAL max_a = MV_MAX(a)', - 'ROW a=["foo", "zoo", "bar"]\n| EVAL max_a = MV_MAX(a)', + 'ROW a = ["x", "y", "z"], b = ["1", "2"]\n| EVAL c = mv_zip(a, b, "-")\n| KEEP a, b, c', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvMedianDefinition: FunctionDefinition = { +const nowDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_median', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_median', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing the median value.', + name: 'now', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.now', { + defaultMessage: 'Returns current date and time.', }), alias: undefined, signatures: [ { - params: [ - { - name: 'number', - type: 'number', - optional: false, - }, - ], - returnType: 'number', + params: [], + returnType: 'date', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'ROW a=[3, 5, 1]\n| EVAL median_a = MV_MEDIAN(a)', - 'ROW a=[3, 7, 1, 6]\n| EVAL median_a = MV_MEDIAN(a)', - ], + examples: ['ROW current_date = NOW()', 'FROM sample_data\n| WHERE @timestamp > NOW() - 1 hour'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvMinDefinition: FunctionDefinition = { +const piDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_min', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_min', { - defaultMessage: - 'Converts a multivalued expression into a single valued column containing the minimum value.', + name: 'pi', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pi', { + defaultMessage: "Returns Pi, the ratio of a circle's circumference to its diameter.", }), alias: undefined, signatures: [ { - params: [ - { - name: 'field', - type: 'boolean', - optional: false, - }, - ], - returnType: 'boolean', - }, - { - params: [ - { - name: 'field', - type: 'date', - optional: false, - }, - ], - returnType: 'date', - }, - { - params: [ - { - name: 'field', - type: 'number', - optional: false, - }, - ], - returnType: 'number', - }, - { - params: [ - { - name: 'field', - type: 'ip', - optional: false, - }, - ], - returnType: 'ip', - }, - { - params: [ - { - name: 'field', - type: 'string', - optional: false, - }, - ], - returnType: 'string', - }, - { - params: [ - { - name: 'field', - type: 'version', - optional: false, - }, - ], - returnType: 'version', + params: [], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'ROW a=[2, 1]\n| EVAL min_a = MV_MIN(a)', - 'ROW a=["foo", "bar"]\n| EVAL min_a = MV_MIN(a)', - ], + examples: ['ROW PI()'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvSliceDefinition: FunctionDefinition = { +const powDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_slice', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_slice', { - defaultMessage: - 'Returns a subset of the multivalued field using the start and end index values.', + name: 'pow', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pow', { + defaultMessage: 'Returns the value of `base` raised to the power of `exponent`.', }), alias: undefined, signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'double', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'boolean', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'cartesian_point', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'integer', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'cartesian_point', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'cartesian_shape', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'long', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'cartesian_shape', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'date', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'unsigned_long', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'date', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'number', + name: 'base', + type: 'integer', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'double', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'geo_point', + name: 'base', + type: 'integer', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'integer', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'geo_point', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'geo_shape', + name: 'base', + type: 'integer', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'long', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'geo_shape', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'ip', - optional: false, - }, - { - name: 'start', - type: 'number', + name: 'base', + type: 'integer', optional: false, }, { - name: 'end', - type: 'number', - optional: true, + name: 'exponent', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'ip', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'string', + name: 'base', + type: 'long', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'double', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'string', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'version', + name: 'base', + type: 'long', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'integer', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'version', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3)', - 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, -2), a2 = mv_slice(a, -3, -1)', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvSortDefinition: FunctionDefinition = { - type: 'eval', - name: 'mv_sort', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sort', { - defaultMessage: 'Sorts a multivalued field in lexicographical order.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'base', + type: 'long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'long', + optional: false, }, ], - returnType: 'boolean', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'date', + name: 'base', + type: 'long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'date', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'number', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'double', + optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'ip', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'integer', + optional: false, }, ], - returnType: 'ip', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'string', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'long', + optional: false, }, ], - returnType: 'string', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'version', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'version', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a = [4, 2, -3, 2]\n| EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC")'], + examples: [ + 'ROW base = 2.0, exponent = 2\n| EVAL result = POW(base, exponent)', + 'ROW base = 4, exponent = 0.5\n| EVAL s = POW(base, exponent)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvSumDefinition: FunctionDefinition = { +const repeatDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_sum', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sum', { + name: 'repeat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.repeat', { defaultMessage: - 'Converts a multivalued field into a single valued field containing the sum of all of the values.', + 'Returns a string constructed by concatenating `string` with itself the specified `number` of times.', }), alias: undefined, signatures: [ { params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, { name: 'number', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=[3, 5, 6]\n| EVAL sum_a = MV_SUM(a)'], + examples: ['ROW a = "Hello!"\n| EVAL triple_a = REPEAT(a, 3);'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvZipDefinition: FunctionDefinition = { +const replaceDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_zip', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_zip', { + name: 'replace', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.replace', { defaultMessage: - 'Combines the values from two multivalued fields with a delimiter that joins them together.', + 'The function substitutes in the string `str` any match of the regular expression `regex`\nwith the replacement string `newStr`.', }), alias: undefined, signatures: [ { params: [ { - name: 'string1', - type: 'string', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'string2', - type: 'string', + name: 'regex', + type: 'keyword', + optional: false, + }, + { + name: 'newString', + type: 'keyword', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { - name: 'string1', - type: 'string', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'string2', - type: 'string', + name: 'regex', + type: 'keyword', optional: false, }, { - name: 'delim', - type: 'string', - optional: true, + name: 'newString', + type: 'text', + optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'ROW a = ["x", "y", "z"], b = ["1", "2"]\n| EVAL c = mv_zip(a, b, "-")\n| KEEP a, b, c', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const nowDefinition: FunctionDefinition = { - type: 'eval', - name: 'now', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.now', { - defaultMessage: 'Returns current date and time.', - }), - alias: undefined, - signatures: [ { - params: [], - returnType: 'date', + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'regex', + type: 'text', + optional: false, + }, + { + name: 'newString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW current_date = NOW()', 'FROM sample_data\n| WHERE @timestamp > NOW() - 1 hour'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const piDefinition: FunctionDefinition = { - type: 'eval', - name: 'pi', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pi', { - defaultMessage: "Returns Pi, the ratio of a circle's circumference to its diameter.", - }), - alias: undefined, - signatures: [ { - params: [], - returnType: 'number', + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'regex', + type: 'text', + optional: false, + }, + { + name: 'newString', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW PI()'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const powDefinition: FunctionDefinition = { - type: 'eval', - name: 'pow', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pow', { - defaultMessage: 'Returns the value of `base` raised to the power of `exponent`.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'base', - type: 'number', + name: 'string', + type: 'text', optional: false, }, { - name: 'exponent', - type: 'number', + name: 'regex', + type: 'keyword', + optional: false, + }, + { + name: 'newString', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'ROW base = 2.0, exponent = 2\n| EVAL result = POW(base, exponent)', - 'ROW base = 4, exponent = 0.5\n| EVAL s = POW(base, exponent)', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const repeatDefinition: FunctionDefinition = { - type: 'eval', - name: 'repeat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.repeat', { - defaultMessage: - 'Returns a string constructed by concatenating `string` with itself the specified `number` of times.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'string', - type: 'string', + type: 'text', optional: false, }, { - name: 'number', - type: 'number', + name: 'regex', + type: 'keyword', + optional: false, + }, + { + name: 'newString', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'regex', + type: 'text', + optional: false, + }, + { + name: 'newString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a = "Hello!"\n| EVAL triple_a = REPEAT(a, 3);'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const replaceDefinition: FunctionDefinition = { - type: 'eval', - name: 'replace', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.replace', { - defaultMessage: - 'The function substitutes in the string `str` any match of the regular expression `regex`\nwith the replacement string `newStr`.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'string', - type: 'string', + type: 'text', optional: false, }, { name: 'regex', - type: 'string', + type: 'text', optional: false, }, { name: 'newString', - type: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -2977,16 +5388,31 @@ const rightDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, { name: 'length', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3011,26 +5437,86 @@ const roundDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'decimals', + type: 'integer', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'decimals', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, { params: [ { name: 'number', - type: 'number', + type: 'long', optional: false, }, { name: 'decimals', - type: 'number', + type: 'integer', optional: true, }, ], - returnType: 'number', + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3054,11 +5540,21 @@ const rtrimDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3083,11 +5579,41 @@ const signumDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3109,11 +5635,41 @@ const sinDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3135,11 +5691,41 @@ const sinhDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3161,16 +5747,61 @@ const splitDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'delim', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, { name: 'delim', - type: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3193,11 +5824,41 @@ const sqrtDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3507,7 +6168,7 @@ const stDistanceDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ @@ -3522,7 +6183,7 @@ const stDistanceDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3829,7 +6490,7 @@ const stXDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ @@ -3839,7 +6500,7 @@ const stXDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3868,7 +6529,7 @@ const stYDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ @@ -3878,7 +6539,7 @@ const stYDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3903,12 +6564,27 @@ const startsWithDefinition: FunctionDefinition = { params: [ { name: 'str', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'prefix', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'str', + type: 'text', optional: false, }, { name: 'prefix', - type: 'string', + type: 'text', optional: false, }, ], @@ -3935,21 +6611,41 @@ const substringDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: true, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, { name: 'start', - type: 'number', + type: 'integer', optional: false, }, { name: 'length', - type: 'number', + type: 'integer', optional: true, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3975,11 +6671,41 @@ const tanDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4001,11 +6727,41 @@ const tanhDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4025,7 +6781,7 @@ const tauDefinition: FunctionDefinition = { signatures: [ { params: [], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4047,11 +6803,21 @@ const toBase64Definition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4084,7 +6850,47 @@ const toBooleanDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4094,7 +6900,7 @@ const toBooleanDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], @@ -4134,7 +6940,17 @@ const toCartesianpointDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4186,7 +7002,17 @@ const toCartesianshapeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4225,7 +7051,47 @@ const toDatetimeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4235,7 +7101,7 @@ const toDatetimeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], @@ -4264,68 +7130,168 @@ const toDegreesDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW rad = [1.57, 3.14, 4.71]\n| EVAL deg = TO_DEGREES(rad)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const toDoubleDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_double', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_double', { + defaultMessage: + 'Converts an input value to a double value. If the input parameter is of a date type,\nits value will be interpreted as milliseconds since the Unix epoch,\nconverted to double. Boolean *true* will be converted to double *1.0*, *false* to *0.0*.', + }), + alias: ['to_dbl'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'counter_double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'counter_integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'counter_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW rad = [1.57, 3.14, 4.71]\n| EVAL deg = TO_DEGREES(rad)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const toDoubleDefinition: FunctionDefinition = { - type: 'eval', - name: 'to_double', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_double', { - defaultMessage: - 'Converts an input value to a double value. If the input parameter is of a date type,\nits value will be interpreted as milliseconds since the Unix epoch,\nconverted to double. Boolean *true* will be converted to double *1.0*, *false* to *0.0*.', - }), - alias: ['to_dbl'], - signatures: [ { params: [ { name: 'field', - type: 'boolean', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'number', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'date', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4360,7 +7326,17 @@ const toGeopointDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4407,7 +7383,17 @@ const toGeoshapeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4440,17 +7426,17 @@ const toIntegerDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'number', + type: 'counter_integer', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ @@ -4460,17 +7446,67 @@ const toIntegerDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4502,7 +7538,17 @@ const toIpDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4535,17 +7581,27 @@ const toLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'counter_integer', + optional: false, + }, + ], + returnType: 'long', }, { params: [ { name: 'field', - type: 'number', + type: 'counter_long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, { params: [ @@ -4555,17 +7611,67 @@ const toLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'long', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4589,11 +7695,21 @@ const toLowerDefinition: FunctionDefinition = { params: [ { name: 'str', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'str', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4615,11 +7731,41 @@ const toRadiansDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4645,7 +7791,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4655,7 +7801,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4665,7 +7811,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4675,17 +7821,17 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4695,7 +7841,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4705,7 +7851,17 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', }, { params: [ @@ -4715,17 +7871,47 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4735,7 +7921,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4765,7 +7951,7 @@ const toUnsignedLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, { params: [ @@ -4775,27 +7961,67 @@ const toUnsignedLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'unsigned_long', }, { params: [ { name: 'field', - type: 'number', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4819,11 +8045,21 @@ const toUpperDefinition: FunctionDefinition = { params: [ { name: 'str', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'str', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4845,7 +8081,17 @@ const toVersionDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'version', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4881,11 +8127,21 @@ const trimDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts index 79ac91d14403a..043c6e44d55bc 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts @@ -7,8 +7,53 @@ */ import { i18n } from '@kbn/i18n'; -import { FunctionDefinition } from './types'; +import { FunctionDefinition, FunctionParameterType, FunctionReturnType } from './types'; +const groupingTypeTable: Array< + [ + FunctionParameterType, + FunctionParameterType, + FunctionParameterType | null, + FunctionParameterType | null, + FunctionReturnType + ] +> = [ + // field // bucket //from // to //result + ['date', 'date_period', null, null, 'date'], + ['date', 'integer', 'date', 'date', 'date'], + // Modified time_duration to time_literal + ['date', 'time_literal', null, null, 'date'], + ['double', 'double', null, null, 'double'], + ['double', 'integer', 'double', 'double', 'double'], + ['double', 'integer', 'double', 'integer', 'double'], + ['double', 'integer', 'double', 'long', 'double'], + ['double', 'integer', 'integer', 'double', 'double'], + ['double', 'integer', 'integer', 'integer', 'double'], + ['double', 'integer', 'integer', 'long', 'double'], + ['double', 'integer', 'long', 'double', 'double'], + ['double', 'integer', 'long', 'integer', 'double'], + ['double', 'integer', 'long', 'long', 'double'], + ['integer', 'double', null, null, 'double'], + ['integer', 'integer', 'double', 'double', 'double'], + ['integer', 'integer', 'double', 'integer', 'double'], + ['integer', 'integer', 'double', 'long', 'double'], + ['integer', 'integer', 'integer', 'double', 'double'], + ['integer', 'integer', 'integer', 'integer', 'double'], + ['integer', 'integer', 'integer', 'long', 'double'], + ['integer', 'integer', 'long', 'double', 'double'], + ['integer', 'integer', 'long', 'integer', 'double'], + ['integer', 'integer', 'long', 'long', 'double'], + ['long', 'double', null, null, 'double'], + ['long', 'integer', 'double', 'double', 'double'], + ['long', 'integer', 'double', 'integer', 'double'], + ['long', 'integer', 'double', 'long', 'double'], + ['long', 'integer', 'integer', 'double', 'double'], + ['long', 'integer', 'integer', 'integer', 'double'], + ['long', 'integer', 'integer', 'long', 'double'], + ['long', 'integer', 'long', 'double', 'double'], + ['long', 'integer', 'long', 'integer', 'double'], + ['long', 'integer', 'long', 'long', 'double'], +]; export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'bucket', @@ -21,65 +66,18 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ supportedCommands: ['stats'], supportedOptions: ['by'], signatures: [ - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'time_literal', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'number' }, - { name: 'buckets', type: 'number', constantOnly: true }, - ], - returnType: 'number', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'string', constantOnly: true }, - { name: 'endDate', type: 'string', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'date', constantOnly: true }, - { name: 'endDate', type: 'date', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'string', constantOnly: true }, - { name: 'endDate', type: 'date', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'date', constantOnly: true }, - { name: 'endDate', type: 'string', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'number' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startValue', type: 'number', constantOnly: true }, - { name: 'endValue', type: 'number', constantOnly: true }, - ], - returnType: 'number', - }, + ...groupingTypeTable.map((signature) => { + const [fieldType, bucketType, fromType, toType, resultType] = signature; + return { + params: [ + { name: 'field', type: fieldType }, + { name: 'buckets', type: bucketType, constantOnly: true }, + ...(fromType ? [{ name: 'startDate', type: fromType, constantOnly: true }] : []), + ...(toType ? [{ name: 'endDate', type: toType, constantOnly: true }] : []), + ], + returnType: resultType, + }; + }), ], examples: [ 'from index | eval hd = bucket(bytes, 1 hour)', diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts index dbf0b7782d1a4..660bb1c7aca81 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts @@ -8,10 +8,20 @@ import type { ESQLCommand, ESQLCommandOption, ESQLFunction, ESQLMessage } from '@kbn/esql-ast'; +// Currently, partial of the full list +// https://github.com/elastic/elasticsearch/blob/main/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/DataType.java export const supportedFieldTypes = [ - 'number', + 'double', + 'unsigned_long', + 'long', + 'integer', + 'counter_integer', + 'counter_long', + 'counter_double', 'date', - 'string', + 'date_period', + 'text', + 'keyword', 'boolean', 'ip', 'cartesian_point', @@ -28,21 +38,43 @@ export type SupportedFieldType = (typeof supportedFieldTypes)[number]; export type FunctionParameterType = | SupportedFieldType + | 'string' | 'null' | 'any' | 'chrono_literal' | 'time_literal' - | 'number[]' + | 'time_duration' + | 'double[]' + | 'unsigned_long[]' + | 'long[]' + | 'integer[]' + | 'counter_integer[]' + | 'counter_long[]' + | 'counter_double[]' | 'string[]' + | 'keyword[]' + | 'text[]' | 'boolean[]' | 'any[]' - | 'date[]'; + | 'datetime[]' + | 'date_period[]'; export type FunctionReturnType = - | 'number' + | 'double' + | 'unsigned_long' + | 'long' + | 'integer' + | 'int' + | 'counter_integer' + | 'counter_long' + | 'counter_double' | 'date' + | 'date_period' + | 'time_duration' | 'any' | 'boolean' + | 'text' + | 'keyword' | 'string' | 'cartesian_point' | 'cartesian_shape' diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/esql_to_kibana_type.ts b/packages/kbn-esql-validation-autocomplete/src/shared/esql_to_kibana_type.ts deleted file mode 100644 index f13052288f29f..0000000000000 --- a/packages/kbn-esql-validation-autocomplete/src/shared/esql_to_kibana_type.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -const ESQL_NUMBER_TYPES = [ - 'double', - 'unsigned_long', - 'long', - 'integer', - 'int', - 'counter_integer', - 'counter_long', - 'counter_double', -]; - -const ESQL_TEXT_TYPES = ['text', 'keyword', 'string']; - -export const esqlToKibanaType = (elasticsearchType: string) => { - if (ESQL_NUMBER_TYPES.includes(elasticsearchType)) { - return 'number'; - } - - if (ESQL_TEXT_TYPES.includes(elasticsearchType)) { - return 'string'; - } - - if (['datetime', 'time_duration'].includes(elasticsearchType)) { - return 'date'; - } - - if (elasticsearchType === 'bool') { - return 'boolean'; - } - - if (elasticsearchType === 'date_period') { - return 'time_literal'; // TODO - consider aligning with Elasticsearch - } - - return elasticsearchType; -}; diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts b/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts new file mode 100644 index 0000000000000..dab8769f8477a --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts @@ -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 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 { ESQLDecimalLiteral, ESQLNumericLiteralType } from '@kbn/esql-ast/src/types'; + +export const ESQL_COMMON_NUMERIC_TYPES = ['double', 'long', 'integer'] as const; +export const ESQL_NUMERIC_DECIMAL_TYPES = [ + 'double', + 'unsigned_long', + 'long', + 'counter_long', + 'counter_double', +] as const; +export const ESQL_NUMBER_TYPES = [ + 'integer', + 'counter_integer', + ...ESQL_NUMERIC_DECIMAL_TYPES, +] as const; + +export const ESQL_STRING_TYPES = ['keyword', 'text'] as const; +export const ESQL_DATE_TYPES = ['datetime', 'date_period'] as const; + +/** + * + * @param type + * @returns + */ +export function isStringType(type: unknown) { + return typeof type === 'string' && ['keyword', 'text'].includes(type); +} + +export function isNumericType(type: unknown): type is ESQLNumericLiteralType { + return ( + typeof type === 'string' && + [...ESQL_NUMBER_TYPES, 'decimal'].includes(type as (typeof ESQL_NUMBER_TYPES)[number]) + ); +} + +export function isNumericDecimalType(type: unknown): type is ESQLDecimalLiteral { + return ( + typeof type === 'string' && + ESQL_NUMERIC_DECIMAL_TYPES.includes(type as (typeof ESQL_NUMERIC_DECIMAL_TYPES)[number]) + ); +} diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts index 68658b29251b5..e13326c2a9f43 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -33,7 +33,7 @@ import { withOption, appendSeparatorOption, } from '../definitions/options'; -import type { +import { CommandDefinition, CommandOptionsDefinition, FunctionParameter, @@ -43,7 +43,7 @@ import type { } from '../definitions/types'; import type { ESQLRealField, ESQLVariable, ReferenceMaps } from '../validation/types'; import { removeMarkerArgFromArgsList } from './context'; -import { esqlToKibanaType } from './esql_to_kibana_type'; +import { isNumericDecimalType } from './esql_types'; import type { ReasonTypes } from './types'; export function nonNullable(v: T): v is NonNullable { @@ -226,6 +226,14 @@ function compareLiteralType(argType: string, item: ESQLLiteral) { return true; } + if (item.literalType === 'decimal' && isNumericDecimalType(argType)) { + return true; + } + + if (item.literalType === 'string' && (argType === 'text' || argType === 'keyword')) { + return true; + } + if (item.literalType !== 'string') { if (argType === item.literalType) { return true; @@ -234,7 +242,7 @@ function compareLiteralType(argType: string, item: ESQLLiteral) { } // date-type parameters accept string literals because of ES auto-casting - return ['string', 'date'].includes(argType); + return ['string', 'date', 'date', 'date_period'].includes(argType); } /** @@ -245,7 +253,14 @@ export function lookupColumn( { fields, variables }: Pick ): ESQLRealField | ESQLVariable | undefined { const columnName = getQuotedColumnName(column); - return fields.get(columnName) || variables.get(columnName)?.[0]; + return ( + fields.get(columnName) || + variables.get(columnName)?.[0] || + // It's possible columnName has backticks "`fieldName`" + // so we need to access the original name as well + fields.get(column.name) || + variables.get(column.name)?.[0] + ); } const ARRAY_REGEXP = /\[\]$/; @@ -255,10 +270,19 @@ export function isArrayType(type: string) { } const arrayToSingularMap: Map = new Map([ - ['number[]', 'number'], - ['date[]', 'date'], - ['boolean[]', 'boolean'], + ['double[]', 'double'], + ['unsigned_long[]', 'unsigned_long'], + ['long[]', 'long'], + ['integer[]', 'integer'], + ['counter_integer[]', 'counter_integer'], + ['counter_long[]', 'counter_long'], + ['counter_double[]', 'counter_double'], ['string[]', 'string'], + ['keyword[]', 'keyword'], + ['text[]', 'text'], + ['datetime[]', 'date'], + ['date_period[]', 'date_period'], + ['boolean[]', 'boolean'], ['any[]', 'any'], ]); @@ -407,7 +431,8 @@ export function checkFunctionArgMatchesDefinition( return true; } if (arg.type === 'literal') { - return compareLiteralType(argType, arg); + const matched = compareLiteralType(argType, arg); + return matched; } if (arg.type === 'function') { if (isSupportedFunction(arg.name, parentCommand).supported) { @@ -428,11 +453,21 @@ export function checkFunctionArgMatchesDefinition( } const wrappedTypes = Array.isArray(validHit.type) ? validHit.type : [validHit.type]; // if final type is of type any make it pass for now - return wrappedTypes.some((ct) => ['any', 'null'].includes(ct) || argType === ct); + return wrappedTypes.some( + (ct) => + ['any', 'null'].includes(ct) || + argType === ct || + (ct === 'string' && ['text', 'keyword'].includes(argType)) + ); } if (arg.type === 'inlineCast') { - // TODO - remove with https://github.com/elastic/kibana/issues/174710 - return argType === esqlToKibanaType(arg.castType); + const lowerArgType = argType?.toLowerCase(); + const lowerArgCastType = arg.castType?.toLowerCase(); + return ( + lowerArgType === lowerArgCastType || + // for valid shorthand casts like 321.12::int or "false"::bool + (['int', 'bool'].includes(lowerArgCastType) && argType.startsWith(lowerArgCastType)) + ); } } diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts b/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts index 22c38cd286e19..ee1a912c688ea 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts @@ -35,7 +35,7 @@ function addToVariables( if (isColumnItem(oldArg) && isColumnItem(newArg)) { const newVariable: ESQLVariable = { name: newArg.name, - type: 'number' /* fallback to number */, + type: 'double' /* fallback to number */, location: newArg.location, }; // Now workout the exact type @@ -107,7 +107,7 @@ function addVariableFromAssignment( const rightHandSideArgType = getAssignRightHandSideType(assignOperation.args[1], fields); addToVariableOccurrencies(variables, { name: assignOperation.args[0].name, - type: rightHandSideArgType || 'number' /* fallback to number */, + type: rightHandSideArgType || 'double' /* fallback to number */, location: assignOperation.args[0].location, }); } @@ -125,7 +125,7 @@ function addVariableFromExpression( queryString, expressionOperation.location ); - const expressionType = 'number'; + const expressionType = 'double'; addToVariableOccurrencies(variables, { name: forwardThinkingVariableName, type: expressionType, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts index 9d28f88115b42..02f7c30d96ff9 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts @@ -31,7 +31,7 @@ export const setup = async () => { return await validateQuery(query, getAstAndSyntaxErrors, opts, cb); }; - const assertErrors = (errors: unknown[], expectedErrors: string[]) => { + const assertErrors = (errors: unknown[], expectedErrors: string[], query?: string) => { const errorMessages: string[] = []; for (const error of errors) { if (error && typeof error === 'object') { @@ -46,7 +46,16 @@ export const setup = async () => { errorMessages.push(String(error)); } } - expect(errorMessages.sort()).toStrictEqual(expectedErrors.sort()); + + try { + expect(errorMessages.sort()).toStrictEqual(expectedErrors.sort()); + } catch (error) { + throw Error(`${query}\n + Received: + '${errorMessages.sort()}' + Expected: + ${expectedErrors.sort()}`); + } }; const expectErrors = async ( @@ -57,9 +66,9 @@ export const setup = async () => { cb: ESQLCallbacks = callbacks ) => { const { errors, warnings } = await validateQuery(query, getAstAndSyntaxErrors, opts, cb); - assertErrors(errors, expectedErrors); + assertErrors(errors, expectedErrors, query); if (expectedWarnings) { - assertErrors(warnings, expectedWarnings); + assertErrors(warnings, expectedWarnings, query); } }; diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts index 44c15c722a1de..ea5df88553888 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts @@ -85,7 +85,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { await expectErrors(`METRICS average()`, ['Unknown index [average()]']); await expectErrors(`metrics custom_function()`, ['Unknown index [custom_function()]']); await expectErrors(`metrics indexes*`, ['Unknown index [indexes*]']); - await expectErrors('metrics numberField', ['Unknown index [numberField]']); + await expectErrors('metrics doubleField', ['Unknown index [doubleField]']); await expectErrors('metrics policy', ['Unknown index [policy]']); }); }); @@ -95,26 +95,26 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors('METRICS a_index count()', []); - await expectErrors('metrics a_index avg(numberField) by 1', []); - await expectErrors('metrics a_index count(`numberField`)', []); + await expectErrors('metrics a_index avg(doubleField) by 1', []); + await expectErrors('metrics a_index count(`doubleField`)', []); await expectErrors('metrics a_index count(*)', []); await expectErrors('metrics index var0 = count(*)', []); await expectErrors('metrics a_index var0 = count()', []); - await expectErrors('metrics a_index var0 = avg(numberField), count(*)', []); + await expectErrors('metrics a_index var0 = avg(doubleField), count(*)', []); await expectErrors(`metrics a_index sum(case(false, 0, 1))`, []); await expectErrors(`metrics a_index var0 = sum( case(false, 0, 1))`, []); - await expectErrors('metrics a_index count(stringField == "a" or null)', []); - await expectErrors('metrics other_index max(numberField) by stringField', []); + await expectErrors('metrics a_index count(textField == "a" or null)', []); + await expectErrors('metrics other_index max(doubleField) by textField', []); }); test('syntax errors', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index numberField=', [ + await expectErrors('metrics a_index doubleField=', [ expect.any(String), "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - await expectErrors('metrics a_index numberField=5 by ', [ + await expectErrors('metrics a_index doubleField=5 by ', [ expect.any(String), "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); @@ -131,29 +131,29 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('errors when no aggregation function specified', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index numberField + 1', [ - 'At least one aggregation function required in [METRICS], found [numberField+1]', + await expectErrors('metrics a_index doubleField + 1', [ + 'At least one aggregation function required in [METRICS], found [doubleField+1]', ]); - await expectErrors('metrics a_index a = numberField + 1', [ - 'At least one aggregation function required in [METRICS], found [a=numberField+1]', + await expectErrors('metrics a_index a = doubleField + 1', [ + 'At least one aggregation function required in [METRICS], found [a=doubleField+1]', ]); - await expectErrors('metrics a_index a = numberField + 1, stringField', [ - 'At least one aggregation function required in [METRICS], found [a=numberField+1]', - 'Expected an aggregate function or group but got [stringField] of type [FieldAttribute]', + await expectErrors('metrics a_index a = doubleField + 1, textField', [ + 'At least one aggregation function required in [METRICS], found [a=doubleField+1]', + 'Expected an aggregate function or group but got [textField] of type [FieldAttribute]', ]); - await expectErrors('metrics a_index numberField + 1 by ipField', [ - 'At least one aggregation function required in [METRICS], found [numberField+1]', + await expectErrors('metrics a_index doubleField + 1 by ipField', [ + 'At least one aggregation function required in [METRICS], found [doubleField+1]', ]); }); test('errors on agg and non-agg mix', async () => { const { expectErrors } = await setup(); - await expectErrors('METRICS a_index sum( numberField ) + abs( numberField ) ', [ - 'Cannot combine aggregation and non-aggregation values in [METRICS], found [sum(numberField)+abs(numberField)]', + await expectErrors('METRICS a_index sum( doubleField ) + abs( doubleField ) ', [ + 'Cannot combine aggregation and non-aggregation values in [METRICS], found [sum(doubleField)+abs(doubleField)]', ]); - await expectErrors('METRICS a_index abs( numberField + sum( numberField )) ', [ - 'Cannot combine aggregation and non-aggregation values in [METRICS], found [abs(numberField+sum(numberField))]', + await expectErrors('METRICS a_index abs( doubleField + sum( doubleField )) ', [ + 'Cannot combine aggregation and non-aggregation values in [METRICS], found [abs(doubleField+sum(doubleField))]', ]); }); @@ -169,8 +169,8 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('errors when input is not an aggregate function', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index numberField ', [ - 'Expected an aggregate function or group but got [numberField] of type [FieldAttribute]', + await expectErrors('metrics a_index doubleField ', [ + 'Expected an aggregate function or group but got [doubleField] of type [FieldAttribute]', ]); }); @@ -179,9 +179,9 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { for (const subCommand of ['keep', 'drop', 'eval']) { await expectErrors( - 'metrics a_index count(`numberField`) | ' + + 'metrics a_index count(`doubleField`) | ' + subCommand + - ' `count(``numberField``)` ', + ' `count(``doubleField``)` ', [] ); } @@ -194,7 +194,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('metrics a_index count(count(*))', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); }); @@ -204,21 +204,21 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - 'metrics a_index avg(numberField), percentile(numberField, 50) by ipField', + 'metrics a_index avg(doubleField), percentile(doubleField, 50) by ipField', [] ); await expectErrors( - 'metrics a_index avg(numberField), percentile(numberField, 50) BY ipField', + 'metrics a_index avg(doubleField), percentile(doubleField, 50) BY ipField', [] ); await expectErrors( - 'metrics a_index avg(numberField), percentile(numberField, 50) + 1 by ipField', + 'metrics a_index avg(doubleField), percentile(doubleField, 50) + 1 by ipField', [] ); - await expectErrors('metrics a_index avg(numberField) by stringField | limit 100', []); + await expectErrors('metrics a_index avg(doubleField) by textField | limit 100', []); for (const op of ['+', '-', '*', '/', '%']) { await expectErrors( - `metrics a_index avg(numberField) ${op} percentile(numberField, 50) BY ipField`, + `metrics a_index avg(doubleField) ${op} percentile(doubleField, 50) BY ipField`, [] ); } @@ -227,9 +227,9 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('syntax does not allow clause without ', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index BY stringField', [ + await expectErrors('metrics a_index BY textField', [ 'Expected an aggregate function or group but got [BY] of type [FieldAttribute]', - "SyntaxError: extraneous input 'stringField' expecting ", + "SyntaxError: extraneous input 'textField' expecting ", ]); }); @@ -239,7 +239,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { await expectErrors('metrics a_index count(* + 1) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); - await expectErrors('metrics a_index \n count(* + round(numberField)) BY ipField', [ + await expectErrors('metrics a_index \n count(* + round(doubleField)) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); }); @@ -251,20 +251,20 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('metrics a_index count(count(*)) BY ipField', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); test('errors on unknown field', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index avg(numberField) by wrongField', [ + await expectErrors('metrics a_index avg(doubleField) by wrongField', [ 'Unknown column [wrongField]', ]); - await expectErrors('metrics a_index avg(numberField) by wrongField + 1', [ + await expectErrors('metrics a_index avg(doubleField) by wrongField + 1', [ 'Unknown column [wrongField]', ]); - await expectErrors('metrics a_index avg(numberField) by var0 = wrongField + 1', [ + await expectErrors('metrics a_index avg(doubleField) by var0 = wrongField + 1', [ 'Unknown column [wrongField]', ]); }); @@ -272,11 +272,11 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('various errors', async () => { const { expectErrors } = await setup(); - await expectErrors('METRICS a_index avg(numberField) by percentile(numberField)', [ + await expectErrors('METRICS a_index avg(doubleField) by percentile(doubleField)', [ 'METRICS BY does not support function percentile', ]); await expectErrors( - 'METRICS a_index avg(numberField) by stringField, percentile(numberField) by ipField', + 'METRICS a_index avg(doubleField) by textField, percentile(doubleField) by ipField', [ "SyntaxError: mismatched input 'by' expecting ", 'METRICS BY does not support function percentile', diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts index 5a98d362dc002..f5bd10fe0ca83 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts @@ -15,15 +15,15 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('no errors on correct usage', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats by stringField', []); + await expectErrors('from a_index | stats by textField', []); await expectErrors( `FROM index - | EVAL numberField * 3.281 - | STATS avg_numberField = AVG(\`numberField * 3.281\`)`, + | EVAL doubleField * 3.281 + | STATS avg_doubleField = AVG(\`doubleField * 3.281\`)`, [] ); await expectErrors( - `FROM index | STATS AVG(numberField) by round(numberField) + 1 | EVAL \`round(numberField) + 1\` / 2`, + `FROM index | STATS AVG(doubleField) by round(doubleField) + 1 | EVAL \`round(doubleField) + 1\` / 2`, [] ); }); @@ -40,18 +40,18 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('no errors on correct usage', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats avg(numberField) by 1', []); - await expectErrors('from a_index | stats count(`numberField`)', []); + await expectErrors('from a_index | stats avg(doubleField) by 1', []); + await expectErrors('from a_index | stats count(`doubleField`)', []); await expectErrors('from a_index | stats count(*)', []); await expectErrors('from a_index | stats count()', []); await expectErrors('from a_index | stats var0 = count(*)', []); await expectErrors('from a_index | stats var0 = count()', []); - await expectErrors('from a_index | stats var0 = avg(numberField), count(*)', []); + await expectErrors('from a_index | stats var0 = avg(doubleField), count(*)', []); await expectErrors(`from a_index | stats sum(case(false, 0, 1))`, []); await expectErrors(`from a_index | stats var0 = sum( case(false, 0, 1))`, []); // "or" must accept "null" - await expectErrors('from a_index | stats count(stringField == "a" or null)', []); + await expectErrors('from a_index | stats count(textField == "a" or null)', []); }); test('sub-command can reference aggregated field', async () => { @@ -59,9 +59,9 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { for (const subCommand of ['keep', 'drop', 'eval']) { await expectErrors( - 'from a_index | stats count(`numberField`) | ' + + 'from a_index | stats count(`doubleField`) | ' + subCommand + - ' `count(``numberField``)` ', + ' `count(``doubleField``)` ', [] ); } @@ -70,64 +70,64 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('errors on agg and non-agg mix', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | STATS sum( numberField ) + abs( numberField ) ', [ - 'Cannot combine aggregation and non-aggregation values in [STATS], found [sum(numberField)+abs(numberField)]', + await expectErrors('from a_index | STATS sum( doubleField ) + abs( doubleField ) ', [ + 'Cannot combine aggregation and non-aggregation values in [STATS], found [sum(doubleField)+abs(doubleField)]', ]); - await expectErrors('from a_index | STATS abs( numberField + sum( numberField )) ', [ - 'Cannot combine aggregation and non-aggregation values in [STATS], found [abs(numberField+sum(numberField))]', + await expectErrors('from a_index | STATS abs( doubleField + sum( doubleField )) ', [ + 'Cannot combine aggregation and non-aggregation values in [STATS], found [abs(doubleField+sum(doubleField))]', ]); }); test('errors on each aggregation field, which does not contain at least one agg function', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats numberField + 1', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', + await expectErrors('from a_index | stats doubleField + 1', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', ]); - await expectErrors('from a_index | stats numberField + 1, stringField', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', - 'Expected an aggregate function or group but got [stringField] of type [FieldAttribute]', + await expectErrors('from a_index | stats doubleField + 1, textField', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', + 'Expected an aggregate function or group but got [textField] of type [FieldAttribute]', ]); - await expectErrors('from a_index | stats numberField + 1, numberField + 2, count()', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', - 'At least one aggregation function required in [STATS], found [numberField+2]', + await expectErrors('from a_index | stats doubleField + 1, doubleField + 2, count()', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', + 'At least one aggregation function required in [STATS], found [doubleField+2]', ]); await expectErrors( - 'from a_index | stats numberField + 1, numberField + count(), count()', - ['At least one aggregation function required in [STATS], found [numberField+1]'] + 'from a_index | stats doubleField + 1, doubleField + count(), count()', + ['At least one aggregation function required in [STATS], found [doubleField+1]'] ); - await expectErrors('from a_index | stats 5 + numberField + 1', [ - 'At least one aggregation function required in [STATS], found [5+numberField+1]', + await expectErrors('from a_index | stats 5 + doubleField + 1', [ + 'At least one aggregation function required in [STATS], found [5+doubleField+1]', ]); - await expectErrors('from a_index | stats numberField + 1 by ipField', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', + await expectErrors('from a_index | stats doubleField + 1 by ipField', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', ]); }); test('errors when input is not an aggregate function', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats numberField ', [ - 'Expected an aggregate function or group but got [numberField] of type [FieldAttribute]', + await expectErrors('from a_index | stats doubleField ', [ + 'Expected an aggregate function or group but got [doubleField] of type [FieldAttribute]', ]); }); test('various errors', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats numberField=', [ + await expectErrors('from a_index | stats doubleField=', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - await expectErrors('from a_index | stats numberField=5 by ', [ + await expectErrors('from a_index | stats doubleField=5 by ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - await expectErrors('from a_index | stats avg(numberField) by wrongField', [ + await expectErrors('from a_index | stats avg(doubleField) by wrongField', [ 'Unknown column [wrongField]', ]); - await expectErrors('from a_index | stats avg(numberField) by wrongField + 1', [ + await expectErrors('from a_index | stats avg(doubleField) by wrongField + 1', [ 'Unknown column [wrongField]', ]); - await expectErrors('from a_index | stats avg(numberField) by var0 = wrongField + 1', [ + await expectErrors('from a_index | stats avg(doubleField) by var0 = wrongField + 1', [ 'Unknown column [wrongField]', ]); await expectErrors('from a_index | stats var0 = avg(fn(number)), count(*)', [ @@ -142,7 +142,7 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('from a_index | stats count(count(*))', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); }); @@ -152,20 +152,20 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - 'from a_index | stats avg(numberField), percentile(numberField, 50) by ipField', + 'from a_index | stats avg(doubleField), percentile(doubleField, 50) by ipField', [] ); await expectErrors( - 'from a_index | stats avg(numberField), percentile(numberField, 50) BY ipField', + 'from a_index | stats avg(doubleField), percentile(doubleField, 50) BY ipField', [] ); await expectErrors( - 'from a_index | stats avg(numberField), percentile(numberField, 50) + 1 by ipField', + 'from a_index | stats avg(doubleField), percentile(doubleField, 50) + 1 by ipField', [] ); for (const op of ['+', '-', '*', '/', '%']) { await expectErrors( - `from a_index | stats avg(numberField) ${op} percentile(numberField, 50) BY ipField`, + `from a_index | stats avg(doubleField) ${op} percentile(doubleField, 50) BY ipField`, [] ); } @@ -185,7 +185,7 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { await expectErrors('from a_index | stats count(* + 1) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); - await expectErrors('from a_index | stats count(* + round(numberField)) BY ipField', [ + await expectErrors('from a_index | stats count(* + round(doubleField)) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); }); @@ -197,18 +197,18 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('from a_index | stats count(count(*)) BY ipField', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); test('various errors', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats avg(numberField) by percentile(numberField)', [ + await expectErrors('from a_index | stats avg(doubleField) by percentile(doubleField)', [ 'STATS BY does not support function percentile', ]); await expectErrors( - 'from a_index | stats avg(numberField) by stringField, percentile(numberField) by ipField', + 'from a_index | stats avg(doubleField) by textField, percentile(doubleField) by ipField', [ "SyntaxError: mismatched input 'by' expecting ", 'STATS BY does not support function percentile', @@ -220,34 +220,37 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('no errors', async () => { const { expectErrors } = await setup(); - await expectErrors('from index | stats by bucket(dateField, pi(), "", "")', []); await expectErrors( 'from index | stats by bucket(dateField, 1 + 30 / 10, "", "")', [] ); await expectErrors( 'from index | stats by bucket(dateField, 1 + 30 / 10, concat("", ""), "")', - [] + ['Argument of [bucket] must be [date], found value [concat("","")] type [keyword]'] ); }); test('errors', async () => { const { expectErrors } = await setup(); + await expectErrors('from index | stats by bucket(dateField, pi(), "", "")', [ + 'Argument of [bucket] must be [integer], found value [pi()] type [double]', + ]); + await expectErrors( - 'from index | stats by bucket(dateField, abs(numberField), "", "")', - ['Argument of [bucket] must be a constant, received [abs(numberField)]'] + 'from index | stats by bucket(dateField, abs(doubleField), "", "")', + ['Argument of [bucket] must be a constant, received [abs(doubleField)]'] ); await expectErrors( - 'from index | stats by bucket(dateField, abs(length(numberField)), "", "")', - ['Argument of [bucket] must be a constant, received [abs(length(numberField))]'] + 'from index | stats by bucket(dateField, abs(length(doubleField)), "", "")', + ['Argument of [bucket] must be a constant, received [abs(length(doubleField))]'] ); await expectErrors( - 'from index | stats by bucket(dateField, numberField, stringField, stringField)', + 'from index | stats by bucket(dateField, doubleField, textField, textField)', [ - '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 [bucket] must be a constant, received [doubleField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', ] ); }); @@ -269,11 +272,11 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - `from a_index | stats 5 + avg(numberField) ${builtinWrapping}`, + `from a_index | stats 5 + avg(doubleField) ${builtinWrapping}`, [] ); await expectErrors( - `from a_index | stats 5 ${builtinWrapping} + avg(numberField)`, + `from a_index | stats 5 ${builtinWrapping} + avg(doubleField)`, [] ); }); @@ -281,16 +284,16 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('errors', async () => { const { expectErrors } = await setup(); - await expectErrors(`from a_index | stats 5 ${builtinWrapping} + numberField`, [ - `At least one aggregation function required in [STATS], found [5${builtinWrapping}+numberField]`, + await expectErrors(`from a_index | stats 5 ${builtinWrapping} + doubleField`, [ + `At least one aggregation function required in [STATS], found [5${builtinWrapping}+doubleField]`, ]); - await expectErrors(`from a_index | stats 5 + numberField ${builtinWrapping}`, [ - `At least one aggregation function required in [STATS], found [5+numberField${builtinWrapping}]`, + await expectErrors(`from a_index | stats 5 + doubleField ${builtinWrapping}`, [ + `At least one aggregation function required in [STATS], found [5+doubleField${builtinWrapping}]`, ]); await expectErrors( - `from a_index | stats 5 + numberField ${builtinWrapping}, var0 = sum(numberField)`, + `from a_index | stats 5 + doubleField ${builtinWrapping}, var0 = sum(doubleField)`, [ - `At least one aggregation function required in [STATS], found [5+numberField${builtinWrapping}]`, + `At least one aggregation function required in [STATS], found [5+doubleField${builtinWrapping}]`, ] ); }); @@ -304,31 +307,31 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField) ${closingWrapping} + ${evalWrapping} sum(numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField) ${closingWrapping} + ${evalWrapping} sum(doubleField) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField + numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField + doubleField) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField + round(numberField)) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField + round(doubleField)) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField + round(numberField)) ${closingWrapping} + ${evalWrapping} sum(numberField + round(numberField)) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField + round(doubleField)) ${closingWrapping} + ${evalWrapping} sum(doubleField + round(doubleField)) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats sum(${evalWrapping} numberField ${closingWrapping} )`, + `from a_index | stats sum(${evalWrapping} doubleField ${closingWrapping} )`, [] ); await expectErrors( - `from a_index | stats sum(${evalWrapping} numberField ${closingWrapping} ) + sum(${evalWrapping} numberField ${closingWrapping} )`, + `from a_index | stats sum(${evalWrapping} doubleField ${closingWrapping} ) + sum(${evalWrapping} doubleField ${closingWrapping} )`, [] ); }); @@ -337,21 +340,21 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - `from a_index | stats ${evalWrapping} numberField + sum(numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} doubleField + sum(doubleField) ${closingWrapping}`, [ - `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}numberField+sum(numberField)${closingWrapping}]`, + `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}doubleField+sum(doubleField)${closingWrapping}]`, ] ); await expectErrors( - `from a_index | stats ${evalWrapping} numberField + sum(numberField) ${closingWrapping}, var0 = sum(numberField)`, + `from a_index | stats ${evalWrapping} doubleField + sum(doubleField) ${closingWrapping}, var0 = sum(doubleField)`, [ - `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}numberField+sum(numberField)${closingWrapping}]`, + `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}doubleField+sum(doubleField)${closingWrapping}]`, ] ); await expectErrors( - `from a_index | stats var0 = ${evalWrapping} numberField + sum(numberField) ${closingWrapping}, var1 = sum(numberField)`, + `from a_index | stats var0 = ${evalWrapping} doubleField + sum(doubleField) ${closingWrapping}, var1 = sum(doubleField)`, [ - `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}numberField+sum(numberField)${closingWrapping}]`, + `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}doubleField+sum(doubleField)${closingWrapping}]`, ] ); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.eval.date_diff.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.eval.date_diff.test.ts new file mode 100644 index 0000000000000..fd21ceb9b681c --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.eval.date_diff.test.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { setup } from './helpers'; + +describe('validation', () => { + describe('command', () => { + test('date_diff', async () => { + const { expectErrors } = await setup(); + await expectErrors( + 'row var = date_diff("month", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'row var = date_diff("mm", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'row var = date_diff("bogus", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'from a_index | eval date_diff(textField, "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'from a_index | eval date_diff("month", dateField, "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'from a_index | eval date_diff("month", "2023-12-02T11:00:00.000Z", dateField)', + [] + ); + await expectErrors('from a_index | eval date_diff("month", textField, dateField)', [ + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + ]); + await expectErrors('from a_index | eval date_diff("month", dateField, textField)', [ + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + ]); + await expectErrors( + 'from a_index | eval var = date_diff("year", to_datetime(textField), to_datetime(textField))', + [] + ); + await expectErrors('from a_index | eval date_diff(doubleField, textField, textField)', [ + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + 'Argument of [date_diff] must be [keyword], found value [doubleField] type [double]', + ]); + }); + }); +}); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts index db132d4d3e488..d732838ed919e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts @@ -23,18 +23,18 @@ test('should allow param inside agg function argument', async () => { test('allow params in WHERE command expressions', async () => { const { validate } = await setup(); - const res1 = await validate('FROM index | WHERE stringField >= ?start'); + const res1 = await validate('FROM index | WHERE textField >= ?start'); const res2 = await validate(` FROM index - | WHERE stringField >= ?start - | WHERE stringField <= ?0 - | WHERE stringField == ? + | WHERE textField >= ?start + | WHERE textField <= ?0 + | WHERE textField == ? `); const res3 = await validate(` FROM index - | WHERE stringField >= ?start - AND stringField <= ?0 - AND stringField == ? + | WHERE textField >= ?start + AND textField <= ?0 + AND textField == ? `); expect(res1).toMatchObject({ errors: [], warnings: [] }); 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 d230f9e2facc9..0b601ab2f66a1 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 @@ -9,16 +9,48 @@ ], "fields": [ { - "name": "numberField", - "type": "number" + "name": "doubleField", + "type": "double" + }, + { + "name": "unsignedLongField", + "type": "unsigned_long" + }, + { + "name": "longField", + "type": "long" + }, + { + "name": "integerField", + "type": "integer" + }, + { + "name": "counterIntegerField", + "type": "counter_integer" + }, + { + "name": "counterLongField", + "type": "counter_long" + }, + { + "name": "counterDoubleField", + "type": "counter_double" }, { "name": "dateField", "type": "date" }, { - "name": "stringField", - "type": "string" + "name": "datePeriodField", + "type": "date_period" + }, + { + "name": "textField", + "type": "text" + }, + { + "name": "keywordField", + "type": "keyword" }, { "name": "booleanField", @@ -50,11 +82,11 @@ }, { "name": "any#Char$Field", - "type": "number" + "type": "double" }, { "name": "kubernetes.something.something", - "type": "number" + "type": "double" }, { "name": "@timestamp", @@ -68,11 +100,11 @@ "enrichFields": [ { "name": "otherField", - "type": "string" + "type": "text" }, { "name": "yetAnotherField", - "type": "number" + "type": "double" }, { "name": "otherStringField", @@ -417,9 +449,9 @@ "warning": [] }, { - "query": "row var = (numberField > 0)", + "query": "row var = (doubleField > 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -441,8 +473,8 @@ { "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]" + "Argument of [>] must be [date], found value [false] type [boolean]", + "Argument of [>] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -467,9 +499,9 @@ "warning": [] }, { - "query": "row var = (numberField >= 0)", + "query": "row var = (doubleField >= 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -491,8 +523,8 @@ { "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]" + "Argument of [>=] must be [date], found value [false] type [boolean]", + "Argument of [>=] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -517,9 +549,9 @@ "warning": [] }, { - "query": "row var = (numberField < 0)", + "query": "row var = (doubleField < 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -541,8 +573,8 @@ { "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]" + "Argument of [<] must be [date], found value [false] type [boolean]", + "Argument of [<] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -567,9 +599,9 @@ "warning": [] }, { - "query": "row var = (numberField <= 0)", + "query": "row var = (doubleField <= 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -591,8 +623,8 @@ { "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]" + "Argument of [<=] must be [date], found value [false] type [boolean]", + "Argument of [<=] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -617,9 +649,9 @@ "warning": [] }, { - "query": "row var = (numberField == 0)", + "query": "row var = (doubleField == 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -664,9 +696,9 @@ "warning": [] }, { - "query": "row var = (numberField != 0)", + "query": "row var = (doubleField != 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -713,7 +745,7 @@ { "query": "row var = now() + now()", "error": [ - "Argument of [+] must be [time_literal], found value [now()] type [date]" + "Argument of [+] must be [date_period], found value [now()] type [date]" ], "warning": [] }, @@ -730,7 +762,7 @@ { "query": "row var = now() - now()", "error": [ - "Argument of [-] must be [time_literal], found value [now()] type [date]" + "Argument of [-] must be [date_period], found value [now()] type [date]" ], "warning": [] }, @@ -747,8 +779,8 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [now()] type [date]" ], "warning": [] }, @@ -765,8 +797,8 @@ { "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [now()] type [date]" ], "warning": [] }, @@ -783,8 +815,8 @@ { "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [now()] type [date]" ], "warning": [] }, @@ -811,28 +843,28 @@ { "query": "row var = 5 like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [5] type [number]" + "Argument of [like] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = 5 NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [5] type [number]" + "Argument of [not_like] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [5] type [number]" + "Argument of [like] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [5] type [number]" + "Argument of [not_like] must be [text], found value [5] type [integer]" ], "warning": [] }, @@ -859,28 +891,28 @@ { "query": "row var = 5 rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [5] type [number]" + "Argument of [rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = 5 NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [5] type [number]" + "Argument of [not_rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [5] type [number]" + "Argument of [rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [5] type [number]" + "Argument of [not_rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, @@ -966,24 +998,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 year] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 year] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 year] type [duration]" ], "warning": [] }, @@ -1031,24 +1063,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 years] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 years] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 years] type [duration]" ], "warning": [] }, @@ -1096,24 +1128,24 @@ { "query": "row var = now() * 1 quarter", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarter] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 quarter", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarter] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 quarter", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarter] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, @@ -1161,24 +1193,24 @@ { "query": "row var = now() * 1 quarters", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarters] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 quarters", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarters] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 quarters", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarters] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, @@ -1226,24 +1258,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 month] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 month] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 month] type [duration]" ], "warning": [] }, @@ -1291,24 +1323,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 months] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 months] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 months] type [duration]" ], "warning": [] }, @@ -1356,24 +1388,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 week] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 week] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 week] type [duration]" ], "warning": [] }, @@ -1421,24 +1453,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 weeks] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 weeks] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, @@ -1486,24 +1518,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 day] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 day] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 day] type [duration]" ], "warning": [] }, @@ -1551,24 +1583,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 days] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 days] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 days] type [duration]" ], "warning": [] }, @@ -1616,24 +1648,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hour] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hour] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, @@ -1681,24 +1713,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hours] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hours] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, @@ -1746,24 +1778,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minute] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minute] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, @@ -1811,24 +1843,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minutes] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minutes] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, @@ -1876,24 +1908,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 second] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 second] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 second] type [duration]" ], "warning": [] }, @@ -1941,24 +1973,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 seconds] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 seconds] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, @@ -2006,24 +2038,24 @@ { "query": "row 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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, { "query": "row 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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, { "query": "row 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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, @@ -2071,24 +2103,24 @@ { "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]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 milliseconds] type [duration]" ], "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]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 milliseconds] type [duration]" ], "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]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 milliseconds] type [duration]" ], "warning": [] }, @@ -2099,35 +2131,20 @@ ], "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 ''" - ], - "warning": [] - }, { "query": "show info", "error": [], "warning": [] }, { - "query": "show numberField", + "query": "show doubleField", "error": [ - "SyntaxError: token recognition error at: 'n'", + "SyntaxError: token recognition error at: 'd'", + "SyntaxError: token recognition error at: 'o'", "SyntaxError: token recognition error at: 'u'", - "SyntaxError: token recognition error at: 'm'", "SyntaxError: token recognition error at: 'b'", + "SyntaxError: token recognition error at: 'l'", "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'", @@ -2163,16 +2180,16 @@ "warning": [] }, { - "query": "from index | limit numberField", + "query": "from index | limit doubleField", "error": [ - "SyntaxError: mismatched input 'numberField' expecting INTEGER_LITERAL" + "SyntaxError: mismatched input 'doubleField' expecting INTEGER_LITERAL" ], "warning": [] }, { - "query": "from index | limit stringField", + "query": "from index | limit textField", "error": [ - "SyntaxError: mismatched input 'stringField' expecting INTEGER_LITERAL" + "SyntaxError: mismatched input 'textField' expecting INTEGER_LITERAL" ], "warning": [] }, @@ -2194,12 +2211,12 @@ "warning": [] }, { - "query": "from index | keep stringField, numberField, dateField", + "query": "from index | keep keywordField, doubleField, integerField, dateField", "error": [], "warning": [] }, { - "query": "from index | keep `stringField`, `numberField`, `dateField`", + "query": "from index | keep `keywordField`, `doubleField`, `integerField`, `dateField`", "error": [], "warning": [] }, @@ -2221,7 +2238,7 @@ "warning": [] }, { - "query": "from index | keep missingField, numberField, dateField", + "query": "from index | keep missingField, doubleField, dateField", "error": [ "Unknown column [missingField]" ], @@ -2240,28 +2257,28 @@ "warning": [] }, { - "query": "from index | project stringField, numberField, dateField", + "query": "from index | project textField, doubleField, dateField", "error": [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "from index | PROJECT stringField, numberField, dateField", + "query": "from index | PROJECT textField, doubleField, dateField", "error": [ "SyntaxError: mismatched input 'PROJECT' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "from index | project missingField, numberField, dateField", + "query": "from index | project missingField, doubleField, dateField", "error": [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "from index | keep s*", + "query": "from index | keep k*", "error": [], "warning": [] }, @@ -2271,17 +2288,17 @@ "warning": [] }, { - "query": "from index | keep s*Field", + "query": "from index | keep k*Field", "error": [], "warning": [] }, { - "query": "from index | keep string*Field", + "query": "from index | keep key*Field", "error": [], "warning": [] }, { - "query": "from index | keep s*, n*", + "query": "from index | keep k*, i*", "error": [], "warning": [] }, @@ -2314,12 +2331,12 @@ ] }, { - "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | KEEP `MIN(numberField * 10)`", + "query": "FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | KEEP `MIN(doubleField * 10)`", "error": [], "warning": [] }, { - "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| KEEP `COUNT(*)`", + "query": "FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| KEEP `COUNT(*)`", "error": [], "warning": [] }, @@ -2331,7 +2348,7 @@ "warning": [] }, { - "query": "from index | drop stringField, numberField, dateField", + "query": "from index | drop textField, doubleField, dateField", "error": [], "warning": [] }, @@ -2346,7 +2363,7 @@ "warning": [] }, { - "query": "from index | drop missingField, numberField, dateField", + "query": "from index | drop missingField, doubleField, dateField", "error": [ "Unknown column [missingField]" ], @@ -2358,12 +2375,12 @@ "warning": [] }, { - "query": "from index | drop s*", + "query": "from index | drop t*", "error": [], "warning": [] }, { - "query": "from index | drop s**Field", + "query": "from index | drop t**Field", "error": [], "warning": [] }, @@ -2373,7 +2390,7 @@ "warning": [] }, { - "query": "from index | drop s*F*d", + "query": "from index | drop t*F*d", "error": [], "warning": [] }, @@ -2383,18 +2400,20 @@ "warning": [] }, { - "query": "from index | drop s*Field", + "query": "from index | drop t*Field", "error": [], "warning": [] }, { - "query": "from index | drop string*Field", + "query": "from index | drop textField", "error": [], "warning": [] }, { - "query": "from index | drop s*, n*", - "error": [], + "query": "from index | drop s*, d*", + "error": [ + "Unknown column [s*]" + ], "warning": [] }, { @@ -2426,7 +2445,7 @@ "warning": [] }, { - "query": "from index | drop stringField, *", + "query": "from index | drop textField, *", "error": [ "Removing all fields is not allowed [*]" ], @@ -2440,19 +2459,19 @@ ] }, { - "query": "from index | drop stringField, @timestamp", + "query": "from index | drop textField, @timestamp", "error": [], "warning": [ "Drop [@timestamp] will remove all time filters to the search results" ] }, { - "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | DROP `MIN(numberField * 10)`", + "query": "FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | DROP `MIN(doubleField * 10)`", "error": [], "warning": [] }, { - "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| DROP `COUNT(*)`", + "query": "FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| DROP `COUNT(*)`", "error": [], "warning": [] }, @@ -2464,12 +2483,12 @@ "warning": [] }, { - "query": "from a_index | mv_expand stringField", + "query": "from a_index | mv_expand textField", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand numberField", + "query": "from a_index | mv_expand integerField", "error": [], "warning": [] }, @@ -2489,7 +2508,7 @@ "warning": [] }, { - "query": "from a_index | mv_expand numberField, b", + "query": "from a_index | mv_expand doubleField, b", "error": [ "SyntaxError: token recognition error at: ','", "SyntaxError: extraneous input 'b' expecting " @@ -2524,7 +2543,7 @@ "warning": [] }, { - "query": "from a_index | rename stringField", + "query": "from a_index | rename textField", "error": [ "SyntaxError: mismatched input '' expecting 'as'" ], @@ -2539,7 +2558,7 @@ "warning": [] }, { - "query": "from a_index | rename stringField as", + "query": "from a_index | rename textField as", "error": [ "SyntaxError: missing ID_PATTERN at ''" ], @@ -2554,22 +2573,22 @@ "warning": [] }, { - "query": "from a_index | rename stringField as b", + "query": "from a_index | rename textField as b", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField AS b", + "query": "from a_index | rename textField AS b", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField As b", + "query": "from a_index | rename textField As b", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField As b, b AS c", + "query": "from a_index | rename textField As b, b AS c", "error": [], "warning": [] }, @@ -2584,26 +2603,34 @@ "warning": [] }, { - "query": "from a_index | eval numberField + 1 | rename `numberField + 1` as a", + "query": "from a_index | eval doubleField + 1 | rename `doubleField + 1` as a", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) | rename `avg(numberField)` as avg0", + "query": "from a_index | stats avg(doubleField) | rename `avg(doubleField)` as avg0", "error": [], "warning": [] }, { - "query": "from a_index |eval numberField + 1 | rename `numberField + 1` as ", + "query": "from a_index |eval doubleField + 1 | rename `doubleField + 1` as ", "error": [ "SyntaxError: missing ID_PATTERN at ''" ], "warning": [] }, + { + "query": "from a_index | rename key* as keywords", + "error": [ + "Using wildcards (*) in RENAME is not allowed [key*]", + "Unknown column [keywords]" + ], + "warning": [] + }, { "query": "from a_index | rename s* as strings", "error": [ - "Using wildcards (*) in RENAME is not allowed [s*]", + "Unknown column [s*]", "Unknown column [strings]" ], "warning": [] @@ -2628,29 +2655,29 @@ "warning": [] }, { - "query": "from a_index | dissect stringField", + "query": "from a_index | dissect textField", "error": [ "SyntaxError: missing QUOTED_STRING at ''" ], "warning": [] }, { - "query": "from a_index | dissect stringField 2", + "query": "from a_index | dissect textField 2", "error": [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING" ], "warning": [] }, { - "query": "from a_index | dissect stringField .", + "query": "from a_index | dissect textField .", "error": [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [stringField.]" + "Unknown column [textField.]" ], "warning": [] }, { - "query": "from a_index | dissect stringField %a", + "query": "from a_index | dissect textField %a", "error": [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING", "SyntaxError: mismatched input '' expecting '='" @@ -2658,26 +2685,26 @@ "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\"", + "query": "from a_index | dissect textField \"%{firstWord}\"", "error": [], "warning": [] }, { - "query": "from a_index | dissect numberField \"%{firstWord}\"", + "query": "from a_index | dissect doubleField \"%{firstWord}\"", "error": [ - "DISSECT only supports string type values, found [numberField] of type [number]" + "DISSECT only supports string type values, found [doubleField] of type [double]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option ", + "query": "from a_index | dissect textField \"%{firstWord}\" option ", "error": [ "SyntaxError: mismatched input '' expecting '='" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option = ", + "query": "from a_index | dissect textField \"%{firstWord}\" option = ", "error": [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET}", "Invalid option for DISSECT: [option]" @@ -2685,33 +2712,33 @@ "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option = 1", + "query": "from a_index | dissect textField \"%{firstWord}\" option = 1", "error": [ "Invalid option for DISSECT: [option]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = \"-\"", + "query": "from a_index | dissect textField \"%{firstWord}\" append_separator = \"-\"", "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" ignore_missing = true", + "query": "from a_index | dissect textField \"%{firstWord}\" ignore_missing = true", "error": [ "Invalid option for DISSECT: [ignore_missing]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = true", + "query": "from a_index | dissect textField \"%{firstWord}\" append_separator = true", "error": [ "Invalid value for DISSECT append_separator: expected a string, but was [true]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" | keep firstWord", + "query": "from a_index | dissect textField \"%{firstWord}\" | keep firstWord", "error": [], "warning": [] }, @@ -2723,48 +2750,48 @@ "warning": [] }, { - "query": "from a_index | grok stringField", + "query": "from a_index | grok textField", "error": [ "SyntaxError: missing QUOTED_STRING at ''" ], "warning": [] }, { - "query": "from a_index | grok stringField 2", + "query": "from a_index | grok textField 2", "error": [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING" ], "warning": [] }, { - "query": "from a_index | grok stringField .", + "query": "from a_index | grok textField .", "error": [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [stringField.]" + "Unknown column [textField.]" ], "warning": [] }, { - "query": "from a_index | grok stringField %a", + "query": "from a_index | grok textField %a", "error": [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING" ], "warning": [] }, { - "query": "from a_index | grok stringField \"%{firstWord}\"", + "query": "from a_index | grok textField \"%{firstWord}\"", "error": [], "warning": [] }, { - "query": "from a_index | grok numberField \"%{firstWord}\"", + "query": "from a_index | grok doubleField \"%{firstWord}\"", "error": [ - "GROK only supports string type values, found [numberField] of type [number]" + "GROK only supports string type values, found [doubleField] of type [double]" ], "warning": [] }, { - "query": "from a_index | grok stringField \"%{firstWord}\" | keep firstWord", + "query": "from a_index | grok textField \"%{firstWord}\" | keep firstWord", "error": [], "warning": [] }, @@ -2866,22 +2893,22 @@ "warning": [] }, { - "query": "from a_index | where numberField > 0", + "query": "from a_index | where doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField > 0", + "query": "from a_index | where NOT doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField > 0)", + "query": "from a_index | where (doubleField > 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField > 0))", + "query": "from a_index | where (NOT (doubleField > 0))", "error": [], "warning": [] }, @@ -2891,12 +2918,12 @@ "warning": [] }, { - "query": "from a_index | where stringField > stringField", + "query": "from a_index | where textField > textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField > numberField", + "query": "from a_index | where doubleField > doubleField", "error": [], "warning": [] }, @@ -2908,8 +2935,8 @@ { "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]" + "Argument of [>] must be [date], found value [booleanField] type [boolean]", + "Argument of [>] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -2919,22 +2946,22 @@ "warning": [] }, { - "query": "from a_index | where numberField >= 0", + "query": "from a_index | where doubleField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField >= 0", + "query": "from a_index | where NOT doubleField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField >= 0)", + "query": "from a_index | where (doubleField >= 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField >= 0))", + "query": "from a_index | where (NOT (doubleField >= 0))", "error": [], "warning": [] }, @@ -2944,12 +2971,12 @@ "warning": [] }, { - "query": "from a_index | where stringField >= stringField", + "query": "from a_index | where textField >= textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField >= numberField", + "query": "from a_index | where doubleField >= doubleField", "error": [], "warning": [] }, @@ -2961,8 +2988,8 @@ { "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]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]", + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -2972,22 +2999,22 @@ "warning": [] }, { - "query": "from a_index | where numberField < 0", + "query": "from a_index | where doubleField < 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField < 0", + "query": "from a_index | where NOT doubleField < 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField < 0)", + "query": "from a_index | where (doubleField < 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField < 0))", + "query": "from a_index | where (NOT (doubleField < 0))", "error": [], "warning": [] }, @@ -2997,12 +3024,12 @@ "warning": [] }, { - "query": "from a_index | where stringField < stringField", + "query": "from a_index | where textField < textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField < numberField", + "query": "from a_index | where doubleField < doubleField", "error": [], "warning": [] }, @@ -3014,8 +3041,8 @@ { "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]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]", + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -3025,22 +3052,22 @@ "warning": [] }, { - "query": "from a_index | where numberField <= 0", + "query": "from a_index | where doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField <= 0", + "query": "from a_index | where NOT doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField <= 0)", + "query": "from a_index | where (doubleField <= 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField <= 0))", + "query": "from a_index | where (NOT (doubleField <= 0))", "error": [], "warning": [] }, @@ -3050,12 +3077,12 @@ "warning": [] }, { - "query": "from a_index | where stringField <= stringField", + "query": "from a_index | where textField <= textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField <= numberField", + "query": "from a_index | where doubleField <= doubleField", "error": [], "warning": [] }, @@ -3067,8 +3094,8 @@ { "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]" + "Argument of [<=] must be [date], found value [booleanField] type [boolean]", + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -3078,22 +3105,22 @@ "warning": [] }, { - "query": "from a_index | where numberField == 0", + "query": "from a_index | where doubleField == 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField == 0", + "query": "from a_index | where NOT doubleField == 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField == 0)", + "query": "from a_index | where (doubleField == 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField == 0))", + "query": "from a_index | where (NOT (doubleField == 0))", "error": [], "warning": [] }, @@ -3103,12 +3130,12 @@ "warning": [] }, { - "query": "from a_index | where stringField == stringField", + "query": "from a_index | where textField == textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField == numberField", + "query": "from a_index | where doubleField == doubleField", "error": [], "warning": [] }, @@ -3128,22 +3155,22 @@ "warning": [] }, { - "query": "from a_index | where numberField != 0", + "query": "from a_index | where doubleField != 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField != 0", + "query": "from a_index | where NOT doubleField != 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField != 0)", + "query": "from a_index | where (doubleField != 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField != 0))", + "query": "from a_index | where (NOT (doubleField != 0))", "error": [], "warning": [] }, @@ -3153,12 +3180,12 @@ "warning": [] }, { - "query": "from a_index | where stringField != stringField", + "query": "from a_index | where textField != textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField != numberField", + "query": "from a_index | where doubleField != doubleField", "error": [], "warning": [] }, @@ -3178,82 +3205,82 @@ "warning": [] }, { - "query": "from a_index | where - numberField > 0", + "query": "from a_index | where - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where - round(numberField) > 0", + "query": "from a_index | where - round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + - numberField > 0", + "query": "from a_index | where 1 + - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 - numberField > 0", + "query": "from a_index | where 1 - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where - numberField > 0", + "query": "from a_index | where - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where - round(numberField) > 0", + "query": "from a_index | where - round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + - numberField > 0", + "query": "from a_index | where 1 + - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 - numberField > 0", + "query": "from a_index | where 1 - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + numberField > 0", + "query": "from a_index | where + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + round(numberField) > 0", + "query": "from a_index | where + round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + + numberField > 0", + "query": "from a_index | where 1 + + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + numberField > 0", + "query": "from a_index | where 1 + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + numberField > 0", + "query": "from a_index | where + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + round(numberField) > 0", + "query": "from a_index | where + round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + + numberField > 0", + "query": "from a_index | where 1 + + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + numberField > 0", + "query": "from a_index | where 1 + doubleField > 0", "error": [], "warning": [] }, @@ -3263,82 +3290,82 @@ "warning": [] }, { - "query": "from a_index | where -- numberField > 0", + "query": "from a_index | where -- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -- round(numberField) > 0", + "query": "from a_index | where -- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -- numberField > 0", + "query": "from a_index | where 1 + -- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -- numberField > 0", + "query": "from a_index | where 1 -- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+ numberField > 0", + "query": "from a_index | where -+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+ round(numberField) > 0", + "query": "from a_index | where -+ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+ numberField > 0", + "query": "from a_index | where 1 + -+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+ numberField > 0", + "query": "from a_index | where 1 -+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +- numberField > 0", + "query": "from a_index | where +- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +- round(numberField) > 0", + "query": "from a_index | where +- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +- numberField > 0", + "query": "from a_index | where 1 + +- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +- numberField > 0", + "query": "from a_index | where 1 +- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++ numberField > 0", + "query": "from a_index | where ++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++ round(numberField) > 0", + "query": "from a_index | where ++ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ++ numberField > 0", + "query": "from a_index | where 1 + ++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ++ numberField > 0", + "query": "from a_index | where 1 ++ doubleField > 0", "error": [], "warning": [] }, @@ -3348,82 +3375,82 @@ "warning": [] }, { - "query": "from a_index | where --- numberField > 0", + "query": "from a_index | where --- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where --- round(numberField) > 0", + "query": "from a_index | where --- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + --- numberField > 0", + "query": "from a_index | where 1 + --- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 --- numberField > 0", + "query": "from a_index | where 1 --- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+- numberField > 0", + "query": "from a_index | where -+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+- round(numberField) > 0", + "query": "from a_index | where -+- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+- numberField > 0", + "query": "from a_index | where 1 + -+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+- numberField > 0", + "query": "from a_index | where 1 -+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+ numberField > 0", + "query": "from a_index | where +-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+ round(numberField) > 0", + "query": "from a_index | where +-+ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +-+ numberField > 0", + "query": "from a_index | where 1 + +-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +-+ numberField > 0", + "query": "from a_index | where 1 +-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +++ numberField > 0", + "query": "from a_index | where +++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +++ round(numberField) > 0", + "query": "from a_index | where +++ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +++ numberField > 0", + "query": "from a_index | where 1 + +++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +++ numberField > 0", + "query": "from a_index | where 1 +++ doubleField > 0", "error": [], "warning": [] }, @@ -3433,82 +3460,82 @@ "warning": [] }, { - "query": "from a_index | where ---- numberField > 0", + "query": "from a_index | where ---- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ---- round(numberField) > 0", + "query": "from a_index | where ---- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ---- numberField > 0", + "query": "from a_index | where 1 + ---- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ---- numberField > 0", + "query": "from a_index | where 1 ---- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+-+ numberField > 0", + "query": "from a_index | where -+-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+-+ round(numberField) > 0", + "query": "from a_index | where -+-+ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+-+ numberField > 0", + "query": "from a_index | where 1 + -+-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+-+ numberField > 0", + "query": "from a_index | where 1 -+-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+- numberField > 0", + "query": "from a_index | where +-+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+- round(numberField) > 0", + "query": "from a_index | where +-+- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +-+- numberField > 0", + "query": "from a_index | where 1 + +-+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +-+- numberField > 0", + "query": "from a_index | where 1 +-+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++++ numberField > 0", + "query": "from a_index | where ++++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++++ round(numberField) > 0", + "query": "from a_index | where ++++ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ++++ numberField > 0", + "query": "from a_index | where 1 + ++++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ++++ numberField > 0", + "query": "from a_index | where 1 ++++ doubleField > 0", "error": [], "warning": [] }, @@ -3518,166 +3545,166 @@ "warning": [] }, { - "query": "from a_index | where *+ numberField", + "query": "from a_index | where *+ doubleField", "error": [ "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where /+ numberField", + "query": "from a_index | where /+ doubleField", "error": [ "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where %+ numberField", + "query": "from a_index | where %+ doubleField", "error": [ "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where numberField =~ 0", + "query": "from a_index | where doubleField =~ 0", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField =~ 0", + "query": "from a_index | where NOT doubleField =~ 0", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where (numberField =~ 0)", + "query": "from a_index | where (doubleField =~ 0)", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where (NOT (numberField =~ 0))", + "query": "from a_index | where (NOT (doubleField =~ 0))", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "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]" + "Argument of [=~] must be [text], found value [1] type [number]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | eval stringField =~ 0", + "query": "from a_index | eval textField =~ 0", "error": [ - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where stringField like \"?a\"", + "query": "from a_index | where textField like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where stringField NOT like \"?a\"", + "query": "from a_index | where textField NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField like \"?a\"", + "query": "from a_index | where NOT textField like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField NOT like \"?a\"", + "query": "from a_index | where NOT textField NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where numberField like \"?a\"", + "query": "from a_index | where doubleField like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where numberField NOT like \"?a\"", + "query": "from a_index | where doubleField NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField like \"?a\"", + "query": "from a_index | where NOT doubleField like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField NOT like \"?a\"", + "query": "from a_index | where NOT doubleField NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where stringField rlike \"?a\"", + "query": "from a_index | where textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where stringField NOT rlike \"?a\"", + "query": "from a_index | where textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField rlike \"?a\"", + "query": "from a_index | where NOT textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField NOT rlike \"?a\"", + "query": "from a_index | where NOT textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where numberField rlike \"?a\"", + "query": "from a_index | where doubleField rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" + "Argument of [rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where numberField NOT rlike \"?a\"", + "query": "from a_index | where doubleField NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField rlike \"?a\"", + "query": "from a_index | where NOT doubleField rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" + "Argument of [rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField NOT rlike \"?a\"", + "query": "from a_index | where NOT doubleField NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, @@ -3694,22936 +3721,31688 @@ "warning": [] }, { - "query": "from a_index | where numberField IS NULL", + "query": "from a_index | where doubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS null", + "query": "from a_index | where doubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField is null", + "query": "from a_index | where doubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField is NULL", + "query": "from a_index | where doubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS NOT NULL", + "query": "from a_index | where doubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS NOT null", + "query": "from a_index | where doubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS not NULL", + "query": "from a_index | where doubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField Is nOt NuLL", + "query": "from a_index | where doubleField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NULL", + "query": "from a_index | where unsignedLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS null", + "query": "from a_index | where unsignedLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField is null", + "query": "from a_index | where unsignedLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField is NULL", + "query": "from a_index | where unsignedLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NOT NULL", + "query": "from a_index | where unsignedLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NOT null", + "query": "from a_index | where unsignedLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS not NULL", + "query": "from a_index | where unsignedLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField Is nOt NuLL", + "query": "from a_index | where unsignedLongField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS NULL", + "query": "from a_index | where longField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS null", + "query": "from a_index | where longField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField is null", + "query": "from a_index | where longField is null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField is NULL", + "query": "from a_index | where longField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS NOT NULL", + "query": "from a_index | where longField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS NOT null", + "query": "from a_index | where longField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS not NULL", + "query": "from a_index | where longField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField Is nOt NuLL", + "query": "from a_index | where longField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NULL", + "query": "from a_index | where integerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS null", + "query": "from a_index | where integerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField is null", + "query": "from a_index | where integerField is null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField is NULL", + "query": "from a_index | where integerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT NULL", + "query": "from a_index | where integerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT null", + "query": "from a_index | where integerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS not NULL", + "query": "from a_index | where integerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField Is nOt NuLL", + "query": "from a_index | where integerField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NULL", + "query": "from a_index | where counterIntegerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS null", + "query": "from a_index | where counterIntegerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField is null", + "query": "from a_index | where counterIntegerField is null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField is NULL", + "query": "from a_index | where counterIntegerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NOT NULL", + "query": "from a_index | where counterIntegerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NOT null", + "query": "from a_index | where counterIntegerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS not NULL", + "query": "from a_index | where counterIntegerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField Is nOt NuLL", + "query": "from a_index | where counterIntegerField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NULL", + "query": "from a_index | where counterLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS null", + "query": "from a_index | where counterLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField is null", + "query": "from a_index | where counterLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField is NULL", + "query": "from a_index | where counterLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NOT NULL", + "query": "from a_index | where counterLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NOT null", + "query": "from a_index | where counterLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS not NULL", + "query": "from a_index | where counterLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField Is nOt NuLL", + "query": "from a_index | where counterLongField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NULL", + "query": "from a_index | where counterDoubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS null", + "query": "from a_index | where counterDoubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField is null", + "query": "from a_index | where counterDoubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField is NULL", + "query": "from a_index | where counterDoubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NOT NULL", + "query": "from a_index | where counterDoubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NOT null", + "query": "from a_index | where counterDoubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS not NULL", + "query": "from a_index | where counterDoubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField Is nOt NuLL", + "query": "from a_index | where counterDoubleField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS NULL", + "query": "from a_index | where dateField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS null", + "query": "from a_index | where dateField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField is null", + "query": "from a_index | where dateField is null", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField is NULL", + "query": "from a_index | where dateField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS NOT NULL", + "query": "from a_index | where dateField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS NOT null", + "query": "from a_index | where dateField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS not NULL", + "query": "from a_index | where dateField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField Is nOt NuLL", + "query": "from a_index | where dateField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NULL", + "query": "from a_index | where datePeriodField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS null", + "query": "from a_index | where datePeriodField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField is null", + "query": "from a_index | where datePeriodField is null", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField is NULL", + "query": "from a_index | where datePeriodField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NOT NULL", + "query": "from a_index | where datePeriodField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NOT null", + "query": "from a_index | where datePeriodField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS not NULL", + "query": "from a_index | where datePeriodField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField Is nOt NuLL", + "query": "from a_index | where datePeriodField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NULL", + "query": "from a_index | where textField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS null", + "query": "from a_index | where textField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField is null", + "query": "from a_index | where textField is null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField is NULL", + "query": "from a_index | where textField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT NULL", + "query": "from a_index | where textField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT null", + "query": "from a_index | where textField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS not NULL", + "query": "from a_index | where textField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField Is nOt NuLL", + "query": "from a_index | where textField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField == \"a\" or null", + "query": "from a_index | where keywordField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | where keywordField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField ", + "query": "from a_index | where keywordField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval b = stringField", + "query": "from a_index | where keywordField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + 1", + "query": "from a_index | where keywordField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + ", - "error": [ - "SyntaxError: no viable alternative at input 'numberField + '" - ], + "query": "from a_index | where keywordField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField + 1", - "error": [ - "Argument of [+] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | where keywordField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=b", - "error": [ - "Unknown column [b]" - ], + "query": "from a_index | where keywordField Is nOt NuLL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=b, ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [b]" - ], + "query": "from a_index | where booleanField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round", - "error": [ - "Unknown column [round]" - ], + "query": "from a_index | where booleanField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(", - "error": [ - "SyntaxError: no viable alternative at input 'round('" - ], + "query": "from a_index | where booleanField is null", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) ", + "query": "from a_index | where booleanField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField), ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | where booleanField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField) ", + "query": "from a_index | where booleanField IS NOT null", "error": [], "warning": [] }, { - "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 | where booleanField IS not NULL", + "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 | where booleanField Is nOt NuLL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField), numberField ", + "query": "from a_index | where ipField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField), b = numberField ", + "query": "from a_index | where ipField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=[1, 2, 3]", + "query": "from a_index | where ipField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=[true, false]", + "query": "from a_index | where ipField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=[\"a\", \"b\"]", + "query": "from a_index | where ipField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=null", + "query": "from a_index | where ipField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS NULL", + "query": "from a_index | where ipField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS null", + "query": "from a_index | where ipField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField is null", + "query": "from a_index | where cartesianPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField is NULL", + "query": "from a_index | where cartesianPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS NOT NULL", + "query": "from a_index | where cartesianPointField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS NOT null", + "query": "from a_index | where cartesianPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS not NULL", + "query": "from a_index | where cartesianPointField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NULL", + "query": "from a_index | where cartesianPointField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS null", + "query": "from a_index | where cartesianPointField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField is null", + "query": "from a_index | where cartesianPointField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField is NULL", + "query": "from a_index | where cartesianShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NOT NULL", + "query": "from a_index | where cartesianShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NOT null", + "query": "from a_index | where cartesianShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS not NULL", + "query": "from a_index | where cartesianShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS NULL", + "query": "from a_index | where cartesianShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS null", + "query": "from a_index | where cartesianShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField is null", + "query": "from a_index | where cartesianShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField is NULL", + "query": "from a_index | where cartesianShapeField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS NOT NULL", + "query": "from a_index | where geoPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS NOT null", + "query": "from a_index | where geoPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS not NULL", + "query": "from a_index | where geoPointField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NULL", + "query": "from a_index | where geoPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS null", + "query": "from a_index | where geoPointField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is null", + "query": "from a_index | where geoPointField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is NULL", + "query": "from a_index | where geoPointField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT NULL", + "query": "from a_index | where geoPointField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT null", + "query": "from a_index | where geoShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS not NULL", + "query": "from a_index | where geoShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NULL", + "query": "from a_index | where geoShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS null", + "query": "from a_index | where geoShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField is null", + "query": "from a_index | where geoShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField is NULL", + "query": "from a_index | where geoShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NOT NULL", + "query": "from a_index | where geoShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NOT null", + "query": "from a_index | where geoShapeField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS not NULL", + "query": "from a_index | where versionField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NULL", + "query": "from a_index | where versionField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS null", + "query": "from a_index | where versionField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField is null", + "query": "from a_index | where versionField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField is NULL", + "query": "from a_index | where versionField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NOT NULL", + "query": "from a_index | where versionField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NOT null", + "query": "from a_index | where versionField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS not NULL", + "query": "from a_index | where versionField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NULL", + "query": "from a_index | where textField == \"a\" or null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS null", - "error": [], + "query": "from a_index | eval ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField is null", + "query": "from a_index | eval textField ", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField is NULL", + "query": "from a_index | eval b = textField", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NOT NULL", + "query": "from a_index | eval doubleField + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NOT null", - "error": [], + "query": "from a_index | eval doubleField + ", + "error": [ + "SyntaxError: no viable alternative at input 'doubleField + '" + ], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS not NULL", - "error": [], + "query": "from a_index | eval textField + 1", + "error": [ + "Argument of [+] must be [double], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NULL", - "error": [], + "query": "from a_index | eval a=b", + "error": [ + "Unknown column [b]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS null", - "error": [], + "query": "from a_index | eval a=b, ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Unknown column [b]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField is null", - "error": [], + "query": "from a_index | eval a=round", + "error": [ + "Unknown column [round]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField is NULL", - "error": [], + "query": "from a_index | eval a=round(", + "error": [ + "SyntaxError: no viable alternative at input 'round('" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NOT NULL", + "query": "from a_index | eval a=round(doubleField) ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NOT null", - "error": [], + "query": "from a_index | eval a=round(doubleField), ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS not NULL", + "query": "from a_index | eval a=round(doubleField) + round(doubleField) ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NULL", - "error": [], + "query": "from a_index | eval a=round(doubleField) + round(textField) ", + "error": [ + "Argument of [round] must be [double], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS null", + "query": "from a_index | eval a=round(doubleField) + round(textField), doubleField ", + "error": [ + "Argument of [round] must be [double], found value [textField] type [text]" + ], + "warning": [] + }, + { + "query": "from a_index | eval a=round(doubleField) + round(doubleField), doubleField ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField is null", + "query": "from a_index | eval a=round(doubleField) + round(doubleField), b = doubleField ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField is NULL", + "query": "from a_index | eval a=[1, 2, 3]", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NOT NULL", + "query": "from a_index | eval a=[true, false]", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NOT null", + "query": "from a_index | eval a=[\"a\", \"b\"]", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS not NULL", + "query": "from a_index | eval a=null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NULL", + "query": "from a_index | eval doubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS null", + "query": "from a_index | eval doubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField is null", + "query": "from a_index | eval doubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField is NULL", + "query": "from a_index | eval doubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT NULL", + "query": "from a_index | eval doubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT null", + "query": "from a_index | eval doubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS not NULL", + "query": "from a_index | eval doubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval - numberField", + "query": "from a_index | eval unsignedLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- numberField", + "query": "from a_index | eval unsignedLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- round(numberField)", + "query": "from a_index | eval unsignedLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + - numberField", + "query": "from a_index | eval unsignedLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 - numberField", + "query": "from a_index | eval unsignedLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval - numberField", + "query": "from a_index | eval unsignedLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- numberField", + "query": "from a_index | eval unsignedLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- round(numberField)", + "query": "from a_index | eval longField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + - numberField", + "query": "from a_index | eval longField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 - numberField", + "query": "from a_index | eval longField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval + numberField", + "query": "from a_index | eval longField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ numberField", + "query": "from a_index | eval longField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ round(numberField)", + "query": "from a_index | eval longField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + + numberField", + "query": "from a_index | eval longField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + numberField", + "query": "from a_index | eval integerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval + numberField", + "query": "from a_index | eval integerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ numberField", + "query": "from a_index | eval integerField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ round(numberField)", + "query": "from a_index | eval integerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + + numberField", + "query": "from a_index | eval integerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + numberField", + "query": "from a_index | eval integerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval not booleanField", + "query": "from a_index | eval integerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval -- numberField", + "query": "from a_index | eval counterIntegerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-- numberField", + "query": "from a_index | eval counterIntegerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-- round(numberField)", + "query": "from a_index | eval counterIntegerField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -- numberField", + "query": "from a_index | eval counterIntegerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -- numberField", + "query": "from a_index | eval counterIntegerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval -+ numberField", + "query": "from a_index | eval counterIntegerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+ numberField", + "query": "from a_index | eval counterIntegerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+ round(numberField)", + "query": "from a_index | eval counterLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+ numberField", + "query": "from a_index | eval counterLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+ numberField", + "query": "from a_index | eval counterLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval +- numberField", + "query": "from a_index | eval counterLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+- numberField", + "query": "from a_index | eval counterLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+- round(numberField)", + "query": "from a_index | eval counterLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +- numberField", + "query": "from a_index | eval counterLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +- numberField", + "query": "from a_index | eval counterDoubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ++ numberField", + "query": "from a_index | eval counterDoubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++ numberField", + "query": "from a_index | eval counterDoubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++ round(numberField)", + "query": "from a_index | eval counterDoubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ++ numberField", + "query": "from a_index | eval counterDoubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ++ numberField", + "query": "from a_index | eval counterDoubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval not not booleanField", + "query": "from a_index | eval counterDoubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval --- numberField", + "query": "from a_index | eval dateField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=--- numberField", + "query": "from a_index | eval dateField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=--- round(numberField)", + "query": "from a_index | eval dateField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + --- numberField", + "query": "from a_index | eval dateField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 --- numberField", + "query": "from a_index | eval dateField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval -+- numberField", + "query": "from a_index | eval dateField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+- numberField", + "query": "from a_index | eval dateField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+- round(numberField)", + "query": "from a_index | eval datePeriodField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+- numberField", + "query": "from a_index | eval datePeriodField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+- numberField", + "query": "from a_index | eval datePeriodField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval +-+ numberField", + "query": "from a_index | eval datePeriodField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+ numberField", + "query": "from a_index | eval datePeriodField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+ round(numberField)", + "query": "from a_index | eval datePeriodField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +-+ numberField", + "query": "from a_index | eval datePeriodField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +-+ numberField", + "query": "from a_index | eval textField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval +++ numberField", + "query": "from a_index | eval textField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+++ numberField", + "query": "from a_index | eval textField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+++ round(numberField)", + "query": "from a_index | eval textField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +++ numberField", + "query": "from a_index | eval textField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +++ numberField", + "query": "from a_index | eval textField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval not not not booleanField", + "query": "from a_index | eval textField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ---- numberField", + "query": "from a_index | eval keywordField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=---- numberField", + "query": "from a_index | eval keywordField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=---- round(numberField)", + "query": "from a_index | eval keywordField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ---- numberField", + "query": "from a_index | eval keywordField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ---- numberField", + "query": "from a_index | eval keywordField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval -+-+ numberField", + "query": "from a_index | eval keywordField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+-+ numberField", + "query": "from a_index | eval keywordField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+-+ round(numberField)", + "query": "from a_index | eval booleanField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+-+ numberField", + "query": "from a_index | eval booleanField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+-+ numberField", + "query": "from a_index | eval booleanField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval +-+- numberField", + "query": "from a_index | eval booleanField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+- numberField", + "query": "from a_index | eval booleanField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+- round(numberField)", + "query": "from a_index | eval booleanField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +-+- numberField", + "query": "from a_index | eval booleanField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +-+- numberField", + "query": "from a_index | eval ipField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ++++ numberField", + "query": "from a_index | eval ipField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++++ numberField", + "query": "from a_index | eval ipField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++++ round(numberField)", + "query": "from a_index | eval ipField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ++++ numberField", + "query": "from a_index | eval ipField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ++++ numberField", + "query": "from a_index | eval ipField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval not not not not booleanField", + "query": "from a_index | eval ipField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval *+ numberField", - "error": [ - "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval cartesianPointField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval /+ numberField", - "error": [ - "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval cartesianPointField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | eval %+ numberField", - "error": [ - "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval cartesianPointField is null", + "error": [], "warning": [] }, { - "query": "from a_index | eval log10(-1)", + "query": "from a_index | eval cartesianPointField is NULL", "error": [], - "warning": [ - "Log of a negative number results in null: -1" - ] + "warning": [] }, { - "query": "from a_index | eval log(-1)", + "query": "from a_index | eval cartesianPointField IS NOT NULL", "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 cartesianPointField IS NOT null", "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 cartesianPointField IS not NULL", "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 | eval cartesianShapeField IS NULL", "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": "from a_index | eval cartesianShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField > 0", + "query": "from a_index | eval cartesianShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField > 0)", + "query": "from a_index | eval cartesianShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField > 0))", + "query": "from a_index | eval cartesianShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 > 0", + "query": "from a_index | eval cartesianShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > stringField", + "query": "from a_index | eval cartesianShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > numberField", + "query": "from a_index | eval geoPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField > dateField", + "query": "from a_index | eval geoPointField IS null", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | eval geoPointField is null", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField > ipField", + "query": "from a_index | eval geoPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > stringField", - "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval geoPointField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > numberField", - "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval geoPointField IS NOT null", + "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 geoPointField IS not NULL", + "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 geoShapeField IS NULL", + "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 geoShapeField IS null", + "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 geoShapeField is null", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > now()", - "error": [ - "Argument of [>] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval geoShapeField is NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField > \"2022\"", + "query": "from a_index | eval geoShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" > dateField", + "query": "from a_index | eval geoShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField > \"1.2.3\"", + "query": "from a_index | eval geoShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" > versionField", + "query": "from a_index | eval versionField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField > \"true\"", - "error": [ - "Argument of [>] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval versionField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" > booleanField", - "error": [ - "Argument of [>] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval versionField is null", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField > \"136.36.3.205\"", + "query": "from a_index | eval versionField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" > ipField", + "query": "from a_index | eval versionField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= 0", + "query": "from a_index | eval versionField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField >= 0", + "query": "from a_index | eval versionField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField >= 0)", + "query": "from a_index | eval - doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField >= 0))", + "query": "from a_index | eval a=- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 >= 0", + "query": "from a_index | eval a=- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= stringField", + "query": "from a_index | eval 1 + - doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= numberField", + "query": "from a_index | eval 1 - doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField >= dateField", + "query": "from a_index | eval - doubleField", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | eval a=- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField >= ipField", + "query": "from a_index | eval a=- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= stringField", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 + - doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= numberField", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 - doubleField", + "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 + doubleField", + "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 a=+ doubleField", + "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 a=+ round(doubleField)", + "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 1 + + doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= now()", - "error": [ - "Argument of [>=] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval 1 + doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField >= \"2022\"", + "query": "from a_index | eval + doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" >= dateField", + "query": "from a_index | eval a=+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField >= \"1.2.3\"", + "query": "from a_index | eval a=+ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" >= versionField", + "query": "from a_index | eval 1 + + doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField >= \"true\"", - "error": [ - "Argument of [>=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 + doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" >= booleanField", - "error": [ - "Argument of [>=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval not booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField >= \"136.36.3.205\"", + "query": "from a_index | eval -- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" >= ipField", + "query": "from a_index | eval a=-- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < 0", + "query": "from a_index | eval a=-- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField < 0", + "query": "from a_index | eval 1 + -- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField < 0)", + "query": "from a_index | eval 1 -- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField < 0))", + "query": "from a_index | eval -+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 < 0", + "query": "from a_index | eval a=-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < stringField", + "query": "from a_index | eval a=-+ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < numberField", + "query": "from a_index | eval 1 + -+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < dateField", + "query": "from a_index | eval 1 -+ doubleField", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | eval +- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField < ipField", + "query": "from a_index | eval a=+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < stringField", - "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval a=+- round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < numberField", - "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 + +- doubleField", + "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 1 +- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < stringField", - "error": [ - "Argument of [<] must be [string], found value [dateField] type [date]" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField < dateField", - "error": [ - "Argument of [<] must be [string], found value [dateField] type [date]" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField < 0", - "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField < now()", - "error": [ - "Argument of [<] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval ++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < \"2022\"", + "query": "from a_index | eval a=++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" < dateField", + "query": "from a_index | eval a=++ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField < \"1.2.3\"", + "query": "from a_index | eval 1 + ++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" < versionField", + "query": "from a_index | eval 1 ++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField < \"true\"", - "error": [ - "Argument of [<] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval not not booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" < booleanField", - "error": [ - "Argument of [<] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval --- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField < \"136.36.3.205\"", + "query": "from a_index | eval a=--- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" < ipField", + "query": "from a_index | eval a=--- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= 0", + "query": "from a_index | eval 1 + --- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField <= 0", + "query": "from a_index | eval 1 --- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField <= 0)", + "query": "from a_index | eval -+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField <= 0))", + "query": "from a_index | eval a=-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 <= 0", + "query": "from a_index | eval a=-+- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= stringField", + "query": "from a_index | eval 1 + -+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= numberField", + "query": "from a_index | eval 1 -+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField <= dateField", + "query": "from a_index | eval +-+ doubleField", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | eval a=+-+ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField <= ipField", + "query": "from a_index | eval a=+-+ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= stringField", - "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 + +-+ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= numberField", - "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 +-+ doubleField", + "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 +++ doubleField", + "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 a=+++ doubleField", + "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 a=+++ round(doubleField)", + "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 1 + +++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= now()", - "error": [ - "Argument of [<=] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval 1 +++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField <= \"2022\"", + "query": "from a_index | eval not not not booleanField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" <= dateField", + "query": "from a_index | eval ---- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField <= \"1.2.3\"", + "query": "from a_index | eval a=---- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" <= versionField", + "query": "from a_index | eval a=---- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField <= \"true\"", - "error": [ - "Argument of [<=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 + ---- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" <= booleanField", - "error": [ - "Argument of [<=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 ---- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField <= \"136.36.3.205\"", + "query": "from a_index | eval -+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" <= ipField", + "query": "from a_index | eval a=-+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == 0", + "query": "from a_index | eval a=-+-+ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField == 0", + "query": "from a_index | eval 1 + -+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField == 0)", + "query": "from a_index | eval 1 -+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField == 0))", + "query": "from a_index | eval +-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 == 0", + "query": "from a_index | eval a=+-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == stringField", + "query": "from a_index | eval a=+-+- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == numberField", + "query": "from a_index | eval 1 + +-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField == dateField", + "query": "from a_index | eval 1 +-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField == booleanField", + "query": "from a_index | eval ++++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField == ipField", + "query": "from a_index | eval a=++++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == stringField", - "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval a=++++ round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == numberField", - "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 + ++++ doubleField", + "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 1 ++++ doubleField", + "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 not not not not booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == dateField", + "query": "from a_index | eval *+ doubleField", "error": [ - "Argument of [==] must be [string], found value [dateField] type [date]" + "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval stringField == 0", + "query": "from a_index | eval /+ doubleField", "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" + "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval stringField == now()", + "query": "from a_index | eval %+ doubleField", "error": [ - "Argument of [==] must be [string], found value [now()] type [date]" + "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval dateField == \"2022\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval \"2022\" == dateField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval versionField == \"1.2.3\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval \"1.2.3\" == versionField", + "query": "from a_index | eval log10(-1)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | eval booleanField == \"true\"", + "query": "from a_index | eval log(-1)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | eval \"true\" == booleanField", + "query": "from a_index | eval log(-1, 20)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | eval ipField == \"136.36.3.205\"", + "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 | eval \"136.36.3.205\" == ipField", + "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 | eval numberField != 0", + "query": "from a_index | eval doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField != 0", + "query": "from a_index | eval NOT doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField != 0)", + "query": "from a_index | eval (doubleField > 0)", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField != 0))", + "query": "from a_index | eval (NOT (doubleField > 0))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 != 0", + "query": "from a_index | eval 1 > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField != stringField", + "query": "from a_index | eval textField > textField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField != numberField", + "query": "from a_index | eval doubleField > doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField != dateField", + "query": "from a_index | eval dateField > dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField != booleanField", - "error": [], + "query": "from a_index | eval booleanField > booleanField", + "error": [ + "Argument of [>] must be [date], found value [booleanField] type [boolean]", + "Argument of [>] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval ipField != ipField", + "query": "from a_index | eval ipField > ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField != stringField", + "query": "from a_index | eval doubleField > textField", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Argument of [>] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField != numberField", + "query": "from a_index | eval keywordField > doubleField", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Argument of [>] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval numberField != \"2022\"", + "query": "from a_index | eval doubleField > \"2022\"", "error": [ - "Argument of [!=] must be [number], found value [\"2022\"] type [string]" + "Argument of [>] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval dateField != stringField", + "query": "from a_index | eval dateField > keywordField", "error": [ - "Argument of [!=] must be [string], found value [dateField] type [date]" + "Argument of [>] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField != dateField", + "query": "from a_index | eval keywordField > dateField", "error": [ - "Argument of [!=] must be [string], found value [dateField] type [date]" + "Argument of [>] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField != 0", + "query": "from a_index | eval textField > 0", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Argument of [>] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField != now()", + "query": "from a_index | eval textField > now()", "error": [ - "Argument of [!=] must be [string], found value [now()] type [date]" + "Argument of [>] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval dateField != \"2022\"", + "query": "from a_index | eval dateField > \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" != dateField", + "query": "from a_index | eval \"2022\" > dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField != \"1.2.3\"", + "query": "from a_index | eval versionField > \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" != versionField", + "query": "from a_index | eval \"1.2.3\" > versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField != \"true\"", - "error": [], + "query": "from a_index | eval booleanField > \"true\"", + "error": [ + "Argument of [>] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval \"true\" != booleanField", + "query": "from a_index | eval \"true\" > booleanField", + "error": [ + "Argument of [>] must be [date], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval ipField > \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField != \"136.36.3.205\"", + "query": "from a_index | eval \"136.36.3.205\" > ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" != ipField", + "query": "from a_index | eval doubleField >= 0", "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 NOT doubleField >= 0", "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 (doubleField >= 0)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField in (\"true\", \"false\", false)", + "query": "from a_index | eval (NOT (doubleField >= 0))", "error": [], "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 1 >= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + 1", + "query": "from a_index | eval textField >= textField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField + 1)", + "query": "from a_index | eval doubleField >= doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + 1", + "query": "from a_index | eval dateField >= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval now() + now()", + "query": "from a_index | eval booleanField >= booleanField", "error": [ - "Argument of [+] must be [time_literal], found value [now()] type [date]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]", + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval 1 + \"1\"", - "error": [ - "Argument of [+] must be [number], found value [\"1\"] type [string]" - ], + "query": "from a_index | eval ipField >= ipField", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" + 1", + "query": "from a_index | eval doubleField >= textField", "error": [ - "Argument of [+] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval numberField - 1", - "error": [], + "query": "from a_index | eval keywordField >= doubleField", + "error": [ + "Argument of [>=] must be [double], found value [keywordField] type [keyword]" + ], "warning": [] }, { - "query": "from a_index | eval (numberField - 1)", - "error": [], + "query": "from a_index | eval doubleField >= \"2022\"", + "error": [ + "Argument of [>=] must be [date], found value [doubleField] type [double]" + ], "warning": [] }, { - "query": "from a_index | eval 1 - 1", - "error": [], + "query": "from a_index | eval dateField >= keywordField", + "error": [ + "Argument of [>=] must be [date], found value [keywordField] type [keyword]" + ], "warning": [] }, { - "query": "from a_index | eval now() - now()", + "query": "from a_index | eval keywordField >= dateField", "error": [ - "Argument of [-] must be [time_literal], found value [now()] type [date]" + "Argument of [>=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 - \"1\"", + "query": "from a_index | eval textField >= 0", "error": [ - "Argument of [-] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval \"1\" - 1", + "query": "from a_index | eval textField >= now()", "error": [ - "Argument of [-] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval numberField * 1", + "query": "from a_index | eval dateField >= \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField * 1)", + "query": "from a_index | eval \"2022\" >= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 * 1", + "query": "from a_index | eval versionField >= \"1.2.3\"", "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": "from a_index | eval \"1.2.3\" >= versionField", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 * \"1\"", + "query": "from a_index | eval booleanField >= \"true\"", "error": [ - "Argument of [*] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval \"1\" * 1", + "query": "from a_index | eval \"true\" >= booleanField", "error": [ - "Argument of [*] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval numberField / 1", + "query": "from a_index | eval ipField >= \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField / 1)", + "query": "from a_index | eval \"136.36.3.205\" >= ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 / 1", + "query": "from a_index | eval doubleField < 0", "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": "from a_index | eval NOT doubleField < 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 / \"1\"", - "error": [ - "Argument of [/] must be [number], found value [\"1\"] type [string]" - ], + "query": "from a_index | eval (doubleField < 0)", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" / 1", - "error": [ - "Argument of [/] must be [number], found value [\"1\"] type [string]" - ], + "query": "from a_index | eval (NOT (doubleField < 0))", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField % 1", + "query": "from a_index | eval 1 < 0", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField % 1)", + "query": "from a_index | eval textField < textField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 % 1", + "query": "from a_index | eval doubleField < doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval now() % now()", + "query": "from a_index | eval dateField < dateField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval booleanField < booleanField", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [now()] type [date]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]", + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval 1 % \"1\"", + "query": "from a_index | eval ipField < ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval doubleField < textField", "error": [ - "Argument of [%] must be [number], found value [\"1\"] type [string]" + "Argument of [<] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval \"1\" % 1", + "query": "from a_index | eval keywordField < doubleField", "error": [ - "Argument of [%] must be [number], found value [\"1\"] type [string]" + "Argument of [<] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1/0", - "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] - }, - { - "query": "from a_index | eval var = 1/0", - "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] - }, - { - "query": "from a_index | eval 1 + 1/0", - "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] - }, - { - "query": "from a_index | eval 1%0", - "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] - }, - { - "query": "from a_index | eval var = 1%0", - "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] - }, - { - "query": "from a_index | eval 1 + 1%0", - "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] - }, - { - "query": "from a_index | eval stringField like \"?a\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField NOT like \"?a\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval NOT stringField like \"?a\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval NOT stringField NOT like \"?a\"", - "error": [], + "query": "from a_index | eval doubleField < \"2022\"", + "error": [ + "Argument of [<] must be [date], found value [doubleField] type [double]" + ], "warning": [] }, { - "query": "from a_index | eval numberField like \"?a\"", + "query": "from a_index | eval dateField < keywordField", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval numberField NOT like \"?a\"", + "query": "from a_index | eval keywordField < dateField", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval NOT numberField like \"?a\"", + "query": "from a_index | eval textField < 0", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval NOT numberField NOT like \"?a\"", + "query": "from a_index | eval textField < now()", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField rlike \"?a\"", + "query": "from a_index | eval dateField < \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField NOT rlike \"?a\"", + "query": "from a_index | eval \"2022\" < dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT stringField rlike \"?a\"", + "query": "from a_index | eval versionField < \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT stringField NOT rlike \"?a\"", + "query": "from a_index | eval \"1.2.3\" < versionField", "error": [], "warning": [] }, { - "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 NOT rlike \"?a\"", - "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval NOT numberField rlike \"?a\"", + "query": "from a_index | eval booleanField < \"true\"", "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval NOT numberField NOT rlike \"?a\"", + "query": "from a_index | eval \"true\" < booleanField", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval 1 in (1, 2, 3)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval numberField in (1, 2, 3)", + "query": "from a_index | eval ipField < \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3)", + "query": "from a_index | eval \"136.36.3.205\" < ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3, numberField)", + "query": "from a_index | eval doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 in (1, 2, 3, round(numberField))", + "query": "from a_index | eval NOT doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval \"a\" in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval (doubleField <= 0)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval (NOT (doubleField <= 0))", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField not in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval 1 <= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField not in (\"a\", \"b\", \"c\", stringField)", + "query": "from a_index | eval textField <= textField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval doubleField <= doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval dateField <= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (\"a\", \"b\", \"c\")", - "error": [], + "query": "from a_index | eval booleanField <= booleanField", + "error": [ + "Argument of [<=] must be [date], found value [booleanField] type [boolean]", + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3, stringField)", + "query": "from a_index | eval ipField <= ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval avg(numberField)", + "query": "from a_index | eval doubleField <= textField", "error": [ - "EVAL does not support function avg" + "Argument of [<=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | stats avg(numberField) | eval `avg(numberField)` + 1", - "error": [], + "query": "from a_index | eval keywordField <= doubleField", + "error": [ + "Argument of [<=] must be [double], found value [keywordField] type [keyword]" + ], "warning": [] }, { - "query": "from a_index | eval not", + "query": "from a_index | eval doubleField <= \"2022\"", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Error: [not] function expects exactly one argument, got 0." + "Argument of [<=] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval in", + "query": "from a_index | eval dateField <= keywordField", "error": [ - "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Argument of [<=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField in stringField", + "query": "from a_index | eval keywordField <= dateField", "error": [ - "SyntaxError: missing '(' at 'stringField'", - "SyntaxError: mismatched input '' expecting {',', ')'}" + "Argument of [<=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField in stringField)", + "query": "from a_index | eval textField <= 0", "error": [ - "SyntaxError: missing '(' at 'stringField'", - "Error: [in] function expects exactly 2 arguments, got 1." + "Argument of [<=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField not in stringField", + "query": "from a_index | eval textField <= now()", "error": [ - "SyntaxError: missing '(' at 'stringField'", - "SyntaxError: mismatched input '' expecting {',', ')'}" + "Argument of [<=] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"bogus\")", + "query": "from a_index | eval dateField <= \"2022\"", "error": [], - "warning": [ - "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] + "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"ASC\")", + "query": "from a_index | eval \"2022\" <= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"DESC\")", + "query": "from a_index | eval versionField <= \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1), round(result)", + "query": "from a_index | eval \"1.2.3\" <= versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1) | stats sum(result)", - "error": [], + "query": "from a_index | eval booleanField <= \"true\"", + "error": [ + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1) | stats var0 = sum(result)", + "query": "from a_index | eval \"true\" <= booleanField", + "error": [ + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval ipField <= \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval round(case(false, 0, 1))", + "query": "from a_index | eval \"136.36.3.205\" <= ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 anno", - "error": [ - "EVAL does not support [date_period] in expression [1 anno]" - ], + "query": "from a_index | eval doubleField == 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = 1 anno", - "error": [ - "Unexpected time interval qualifier: 'anno'" - ], + "query": "from a_index | eval NOT doubleField == 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval now() + 1 anno", - "error": [ - "Unexpected time interval qualifier: 'anno'" - ], + "query": "from a_index | eval (doubleField == 0)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year", - "error": [ - "EVAL does not support [date_period] in expression [1 year]" - ], + "query": "from a_index | eval (NOT (doubleField == 0))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year", - "error": [ - "EVAL does not support [date_period] in expression [1 year]" - ], + "query": "from a_index | eval 1 == 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 year", + "query": "from a_index | eval textField == textField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 year", + "query": "from a_index | eval doubleField == doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YEAR", + "query": "from a_index | eval dateField == dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Year", + "query": "from a_index | eval booleanField == booleanField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 year", + "query": "from a_index | eval ipField == ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year + 1 year", + "query": "from a_index | eval doubleField == textField", "error": [ - "Argument of [+] must be [date], found value [1 year] type [duration]" + "Argument of [==] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 year", + "query": "from a_index | eval keywordField == doubleField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 year] type [duration]" + "Argument of [==] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 year", + "query": "from a_index | eval doubleField == \"2022\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 year] type [duration]" + "Argument of [==] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 year", + "query": "from a_index | eval dateField == keywordField", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 year] type [duration]" + "Argument of [==] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 years", + "query": "from a_index | eval keywordField == dateField", "error": [ - "EVAL does not support [date_period] in expression [1 years]" + "Argument of [==] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 years", + "query": "from a_index | eval textField == 0", "error": [ - "EVAL does not support [date_period] in expression [1 years]" + "Argument of [==] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 years", + "query": "from a_index | eval textField == now()", + "error": [ + "Argument of [==] must be [date], found value [textField] type [text]" + ], + "warning": [] + }, + { + "query": "from a_index | eval dateField == \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 years", + "query": "from a_index | eval \"2022\" == dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YEARS", + "query": "from a_index | eval versionField == \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Years", + "query": "from a_index | eval \"1.2.3\" == versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 years", + "query": "from a_index | eval booleanField == \"true\"", "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 \"true\" == booleanField", + "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 ipField == \"136.36.3.205\"", + "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 \"136.36.3.205\" == ipField", + "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 doubleField != 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarter", - "error": [ - "EVAL does not support [date_period] in expression [1 quarter]" - ], + "query": "from a_index | eval NOT doubleField != 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarter", - "error": [ - "EVAL does not support [date_period] in expression [1 quarter]" - ], + "query": "from a_index | eval (doubleField != 0)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 quarter", + "query": "from a_index | eval (NOT (doubleField != 0))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 quarter", + "query": "from a_index | eval 1 != 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 QUARTER", + "query": "from a_index | eval textField != textField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Quarter", + "query": "from a_index | eval doubleField != doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 quarter", + "query": "from a_index | eval dateField != dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarter + 1 year", + "query": "from a_index | eval booleanField != booleanField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval ipField != ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval doubleField != textField", "error": [ - "Argument of [+] must be [date], found value [1 quarter] type [duration]" + "Argument of [!=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 quarter", + "query": "from a_index | eval keywordField != doubleField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarter] type [duration]" + "Argument of [!=] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 quarter", + "query": "from a_index | eval doubleField != \"2022\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarter] type [duration]" + "Argument of [!=] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 quarter", + "query": "from a_index | eval dateField != keywordField", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarter] type [duration]" + "Argument of [!=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 quarters", + "query": "from a_index | eval keywordField != dateField", "error": [ - "EVAL does not support [date_period] in expression [1 quarters]" + "Argument of [!=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 quarters", + "query": "from a_index | eval textField != 0", "error": [ - "EVAL does not support [date_period] in expression [1 quarters]" + "Argument of [!=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 quarters", - "error": [], + "query": "from a_index | eval textField != now()", + "error": [ + "Argument of [!=] must be [date], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 quarters", + "query": "from a_index | eval dateField != \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 QUARTERS", + "query": "from a_index | eval \"2022\" != dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Quarters", + "query": "from a_index | eval versionField != \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 quarters", + "query": "from a_index | eval \"1.2.3\" != versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarters + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval booleanField != \"true\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 quarters", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval \"true\" != booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 quarters", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval ipField != \"136.36.3.205\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 quarters", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval \"136.36.3.205\" != ipField", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month", - "error": [ - "EVAL does not support [date_period] in expression [1 month]" - ], + "query": "from a_index | eval versionField in (\"1.2.3\", \"4.5.6\", to_version(\"2.3.2\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month", - "error": [ - "EVAL does not support [date_period] in expression [1 month]" - ], + "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 | eval var = now() - 1 month", + "query": "from a_index | eval booleanField in (\"true\", \"false\", false)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 month", + "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 | eval var = dateField - 1 MONTH", + "query": "from a_index | eval doubleField + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Month", + "query": "from a_index | eval (doubleField + 1)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 month", + "query": "from a_index | eval 1 + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month + 1 year", + "query": "from a_index | eval now() + now()", "error": [ - "Argument of [+] must be [date], found value [1 month] type [duration]" + "Argument of [+] must be [date_period], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 month", + "query": "from a_index | eval 1 + \"1\"", "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 [date_period], found value [1] type [integer]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 month", + "query": "from a_index | eval \"1\" + 1", "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 [date_period], found value [1] type [integer]" ], "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 doubleField - 1", + "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 (doubleField - 1)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months", + "query": "from a_index | eval 1 - 1", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval now() - now()", "error": [ - "EVAL does not support [date_period] in expression [1 months]" + "Argument of [-] must be [date_period], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 months", - "error": [], + "query": "from a_index | eval 1 - \"1\"", + "error": [ + "Argument of [-] must be [date_period], found value [1] type [integer]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 months", - "error": [], + "query": "from a_index | eval \"1\" - 1", + "error": [ + "Argument of [-] must be [date_period], found value [1] type [integer]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MONTHS", + "query": "from a_index | eval doubleField * 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Months", + "query": "from a_index | eval (doubleField * 1)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 months", + "query": "from a_index | eval 1 * 1", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months + 1 year", + "query": "from a_index | eval now() * now()", "error": [ - "Argument of [+] must be [date], found value [1 months] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 months", + "query": "from a_index | eval 1 * \"1\"", "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 [double], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 months", + "query": "from a_index | eval \"1\" * 1", "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 [double], found value [\"1\"] 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": "from a_index | eval doubleField / 1", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week", - "error": [ - "EVAL does not support [date_period] in expression [1 week]" - ], + "query": "from a_index | eval (doubleField / 1)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week", + "query": "from a_index | eval 1 / 1", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval now() / now()", "error": [ - "EVAL does not support [date_period] in expression [1 week]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 week", - "error": [], + "query": "from a_index | eval 1 / \"1\"", + "error": [ + "Argument of [/] must be [double], found value [\"1\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 week", - "error": [], + "query": "from a_index | eval \"1\" / 1", + "error": [ + "Argument of [/] must be [double], found value [\"1\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 WEEK", + "query": "from a_index | eval doubleField % 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Week", + "query": "from a_index | eval (doubleField % 1)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 week", + "query": "from a_index | eval 1 % 1", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week + 1 year", + "query": "from a_index | eval now() % now()", "error": [ - "Argument of [+] must be [date], found value [1 week] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 week", + "query": "from a_index | eval 1 % \"1\"", "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 [double], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 week", + "query": "from a_index | eval \"1\" % 1", "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 [double], found value [\"1\"] type [string]" ], "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]" - ], - "warning": [] + "query": "from a_index | eval 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval 1 weeks", - "error": [ - "EVAL does not support [date_period] in expression [1 weeks]" - ], - "warning": [] + "query": "from a_index | eval var = 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "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 + 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval var = now() - 1 weeks", + "query": "from a_index | eval 1%0", "error": [], - "warning": [] + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval var = dateField - 1 weeks", + "query": "from a_index | eval var = 1%0", "error": [], - "warning": [] + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval var = dateField - 1 WEEKS", + "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 var = dateField - 1 Weeks", + "query": "from a_index | eval textField like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 weeks", + "query": "from a_index | eval textField NOT like \"?a\"", "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 NOT textField like \"?a\"", + "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 NOT textField NOT like \"?a\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 weeks", + "query": "from a_index | eval doubleField like \"?a\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 weeks] type [duration]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 weeks", + "query": "from a_index | eval doubleField NOT like \"?a\"", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 weeks] type [duration]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval 1 day", + "query": "from a_index | eval NOT doubleField like \"?a\"", "error": [ - "EVAL does not support [date_period] in expression [1 day]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval 1 day", + "query": "from a_index | eval NOT doubleField NOT like \"?a\"", "error": [ - "EVAL does not support [date_period] in expression [1 day]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 day", + "query": "from a_index | eval textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 day", + "query": "from a_index | eval textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 DAY", + "query": "from a_index | eval NOT textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Day", + "query": "from a_index | eval NOT textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 day", - "error": [], + "query": "from a_index | eval doubleField rlike \"?a\"", + "error": [ + "Argument of [rlike] must be [text], found value [doubleField] type [double]" + ], "warning": [] }, { - "query": "from a_index | eval 1 day + 1 year", + "query": "from a_index | eval doubleField NOT rlike \"?a\"", "error": [ - "Argument of [+] must be [date], found value [1 day] type [duration]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 day", + "query": "from a_index | eval NOT doubleField rlike \"?a\"", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 day] type [duration]" + "Argument of [rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 day", + "query": "from a_index | eval NOT doubleField NOT rlike \"?a\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 day] type [duration]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "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 1 in (1, 2, 3)", + "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 doubleField in (1, 2, 3)", + "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 doubleField not in (1, 2, 3)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 days", + "query": "from a_index | eval doubleField not in (1, 2, 3, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 days", + "query": "from a_index | eval 1 in (1, 2, 3, round(doubleField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 DAYS", + "query": "from a_index | eval \"a\" in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Days", + "query": "from a_index | eval textField in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 days", + "query": "from a_index | eval textField not in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 days + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 days] type [duration]" - ], + "query": "from a_index | eval textField not in (\"a\", \"b\", \"c\", textField)", + "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 1 in (\"a\", \"b\", \"c\")", + "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 doubleField in (\"a\", \"b\", \"c\")", + "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 doubleField not in (\"a\", \"b\", \"c\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hour", - "error": [ - "EVAL does not support [date_period] in expression [1 hour]" - ], + "query": "from a_index | eval doubleField not in (1, 2, 3, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hour", + "query": "from a_index | eval avg(doubleField)", "error": [ - "EVAL does not support [date_period] in expression [1 hour]" + "EVAL does not support function avg" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 hour", + "query": "from a_index | stats avg(doubleField) | eval `avg(doubleField)` + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 hour", - "error": [], + "query": "from a_index | eval not", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Error: [not] function expects exactly one argument, got 0." + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 HOUR", - "error": [], + "query": "from a_index | eval in", + "error": [ + "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Hour", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = dateField + 1 hour", - "error": [], - "warning": [] - }, - { - "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 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 var = now() / 1 hour", + "query": "from a_index | eval textField in textField", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hour] type [duration]" + "SyntaxError: missing '(' at 'textField'", + "SyntaxError: mismatched input '' expecting {',', ')'}" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 hour", + "query": "from a_index | eval textField in textField)", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hour] type [duration]" + "SyntaxError: missing '(' at 'textField'", + "Error: [in] function expects exactly 2 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval 1 hours", + "query": "from a_index | eval textField not in textField", "error": [ - "EVAL does not support [date_period] in expression [1 hours]" + "SyntaxError: missing '(' at 'textField'", + "SyntaxError: mismatched input '' expecting {',', ')'}" ], "warning": [] }, { - "query": "from a_index | eval 1 hours", - "error": [ - "EVAL does not support [date_period] in expression [1 hours]" - ], - "warning": [] + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"bogus\")", + "error": [], + "warning": [ + "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." + ] }, { - "query": "from a_index | eval var = now() - 1 hours", + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"ASC\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 hours", + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"DESC\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 HOURS", + "query": "from a_index | eval result = case(false, 0, 1), round(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Hours", + "query": "from a_index | eval result = case(false, 0, 1) | stats sum(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 hours", + "query": "from a_index | eval result = case(false, 0, 1) | stats var0 = sum(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hours + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 hours] type [duration]" - ], + "query": "from a_index | eval round(case(false, 0, 1))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 hours", + "query": "from a_index | eval 1 anno", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hours] type [duration]" + "EVAL does not support [date_period] in expression [1 anno]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 hours", + "query": "from a_index | eval var = 1 anno", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hours] type [duration]" + "Unexpected time interval qualifier: 'anno'" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 hours", + "query": "from a_index | eval now() + 1 anno", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hours] type [duration]" + "Unexpected time interval qualifier: 'anno'" ], "warning": [] }, { - "query": "from a_index | eval 1 minute", + "query": "from a_index | eval 1 year", "error": [ - "EVAL does not support [date_period] in expression [1 minute]" + "EVAL does not support [date_period] in expression [1 year]" ], "warning": [] }, { - "query": "from a_index | eval 1 minute", + "query": "from a_index | eval 1 year", "error": [ - "EVAL does not support [date_period] in expression [1 minute]" + "EVAL does not support [date_period] in expression [1 year]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 minute", + "query": "from a_index | eval var = now() - 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 minute", + "query": "from a_index | eval var = dateField - 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MINUTE", + "query": "from a_index | eval var = dateField - 1 YEAR", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Minute", + "query": "from a_index | eval var = dateField - 1 Year", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 minute", + "query": "from a_index | eval var = dateField + 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minute + 1 year", + "query": "from a_index | eval 1 year + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 minute] type [duration]" + "Argument of [+] must be [date], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 minute", + "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 minute] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 minute", + "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 minute] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 minute", + "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 minute] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 minutes", + "query": "from a_index | eval 1 years", "error": [ - "EVAL does not support [date_period] in expression [1 minutes]" + "EVAL does not support [date_period] in expression [1 years]" ], "warning": [] }, { - "query": "from a_index | eval 1 minutes", + "query": "from a_index | eval 1 years", "error": [ - "EVAL does not support [date_period] in expression [1 minutes]" + "EVAL does not support [date_period] in expression [1 years]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 minutes", + "query": "from a_index | eval var = now() - 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 minutes", + "query": "from a_index | eval var = dateField - 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MINUTES", + "query": "from a_index | eval var = dateField - 1 YEARS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Minutes", + "query": "from a_index | eval var = dateField - 1 Years", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 minutes", + "query": "from a_index | eval var = dateField + 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minutes + 1 year", + "query": "from a_index | eval 1 years + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 minutes] type [duration]" + "Argument of [+] must be [date], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 minutes", + "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 minutes] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 minutes", + "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 minutes] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 minutes", + "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 minutes] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 second", + "query": "from a_index | eval 1 quarter", "error": [ - "EVAL does not support [date_period] in expression [1 second]" + "EVAL does not support [date_period] in expression [1 quarter]" ], "warning": [] }, { - "query": "from a_index | eval 1 second", + "query": "from a_index | eval 1 quarter", "error": [ - "EVAL does not support [date_period] in expression [1 second]" + "EVAL does not support [date_period] in expression [1 quarter]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 second", + "query": "from a_index | eval var = now() - 1 quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 second", + "query": "from a_index | eval var = dateField - 1 quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 SECOND", + "query": "from a_index | eval var = dateField - 1 QUARTER", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Second", + "query": "from a_index | eval var = dateField - 1 Quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 second", + "query": "from a_index | eval var = dateField + 1 quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 second + 1 year", + "query": "from a_index | eval 1 quarter + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 second] type [duration]" + "Argument of [+] must be [date], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 second", + "query": "from a_index | eval var = now() * 1 quarter", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 second] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 second", + "query": "from a_index | eval var = now() / 1 quarter", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 second] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 second", + "query": "from a_index | eval var = now() % 1 quarter", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 second] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 seconds", + "query": "from a_index | eval 1 quarters", "error": [ - "EVAL does not support [date_period] in expression [1 seconds]" + "EVAL does not support [date_period] in expression [1 quarters]" ], "warning": [] }, { - "query": "from a_index | eval 1 seconds", + "query": "from a_index | eval 1 quarters", "error": [ - "EVAL does not support [date_period] in expression [1 seconds]" + "EVAL does not support [date_period] in expression [1 quarters]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 seconds", + "query": "from a_index | eval var = now() - 1 quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 seconds", + "query": "from a_index | eval var = dateField - 1 quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 SECONDS", + "query": "from a_index | eval var = dateField - 1 QUARTERS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Seconds", + "query": "from a_index | eval var = dateField - 1 Quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 seconds", + "query": "from a_index | eval var = dateField + 1 quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 seconds + 1 year", + "query": "from a_index | eval 1 quarters + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 seconds] type [duration]" + "Argument of [+] must be [date], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 seconds", + "query": "from a_index | eval var = now() * 1 quarters", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 seconds] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 seconds", + "query": "from a_index | eval var = now() / 1 quarters", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 seconds] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 seconds", + "query": "from a_index | eval var = now() % 1 quarters", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 seconds] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 millisecond", + "query": "from a_index | eval 1 month", "error": [ - "EVAL does not support [date_period] in expression [1 millisecond]" + "EVAL does not support [date_period] in expression [1 month]" ], "warning": [] }, { - "query": "from a_index | eval 1 millisecond", + "query": "from a_index | eval 1 month", "error": [ - "EVAL does not support [date_period] in expression [1 millisecond]" + "EVAL does not support [date_period] in expression [1 month]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 millisecond", + "query": "from a_index | eval var = now() - 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 millisecond", + "query": "from a_index | eval var = dateField - 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MILLISECOND", + "query": "from a_index | eval var = dateField - 1 MONTH", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Millisecond", + "query": "from a_index | eval var = dateField - 1 Month", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 millisecond", + "query": "from a_index | eval var = dateField + 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 millisecond + 1 year", + "query": "from a_index | eval 1 month + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 millisecond] type [duration]" + "Argument of [+] must be [date], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 millisecond", + "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 millisecond] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 millisecond", + "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 millisecond] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 millisecond", + "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 millisecond] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds", + "query": "from a_index | eval 1 months", "error": [ - "EVAL does not support [date_period] in expression [1 milliseconds]" + "EVAL does not support [date_period] in expression [1 months]" ], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds", + "query": "from a_index | eval 1 months", "error": [ - "EVAL does not support [date_period] in expression [1 milliseconds]" + "EVAL does not support [date_period] in expression [1 months]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 milliseconds", + "query": "from a_index | eval var = now() - 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 milliseconds", + "query": "from a_index | eval var = dateField - 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MILLISECONDS", + "query": "from a_index | eval var = dateField - 1 MONTHS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Milliseconds", + "query": "from a_index | eval var = dateField - 1 Months", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 milliseconds", + "query": "from a_index | eval var = dateField + 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds + 1 year", + "query": "from a_index | eval 1 months + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" + "Argument of [+] must be [date], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 milliseconds", + "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 milliseconds] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 milliseconds", + "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 milliseconds] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 milliseconds", + "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 milliseconds] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 ms", + "query": "from a_index | eval 1 week", "error": [ - "EVAL does not support [date_period] in expression [1 ms]" + "EVAL does not support [date_period] in expression [1 week]" ], "warning": [] }, { - "query": "from a_index | eval 1 ms", + "query": "from a_index | eval 1 week", "error": [ - "EVAL does not support [date_period] in expression [1 ms]" + "EVAL does not support [date_period] in expression [1 week]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 ms", + "query": "from a_index | eval var = now() - 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 ms", + "query": "from a_index | eval var = dateField - 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MS", + "query": "from a_index | eval var = dateField - 1 WEEK", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Ms", + "query": "from a_index | eval var = dateField - 1 Week", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 ms", + "query": "from a_index | eval var = dateField + 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ms + 1 year", + "query": "from a_index | eval 1 week + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 ms] type [duration]" + "Argument of [+] must be [date], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 ms", + "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 ms] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 ms", + "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 ms] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 ms", + "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 ms] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 s", + "query": "from a_index | eval 1 weeks", "error": [ - "EVAL does not support [date_period] in expression [1 s]" + "EVAL does not support [date_period] in expression [1 weeks]" ], "warning": [] }, { - "query": "from a_index | eval 1 s", + "query": "from a_index | eval 1 weeks", "error": [ - "EVAL does not support [date_period] in expression [1 s]" + "EVAL does not support [date_period] in expression [1 weeks]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 s", + "query": "from a_index | eval var = now() - 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 s", + "query": "from a_index | eval var = dateField - 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 S", + "query": "from a_index | eval var = dateField - 1 WEEKS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 S", + "query": "from a_index | eval var = dateField - 1 Weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 s", + "query": "from a_index | eval var = dateField + 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 s + 1 year", + "query": "from a_index | eval 1 weeks + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 s] type [duration]" + "Argument of [+] must be [date], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 s", + "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 s] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 s", + "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 s] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 s", + "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 s] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 m", + "query": "from a_index | eval 1 day", "error": [ - "EVAL does not support [date_period] in expression [1 m]" + "EVAL does not support [date_period] in expression [1 day]" ], "warning": [] }, { - "query": "from a_index | eval 1 m", + "query": "from a_index | eval 1 day", "error": [ - "EVAL does not support [date_period] in expression [1 m]" + "EVAL does not support [date_period] in expression [1 day]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 m", + "query": "from a_index | eval var = now() - 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 m", + "query": "from a_index | eval var = dateField - 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 M", + "query": "from a_index | eval var = dateField - 1 DAY", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 M", + "query": "from a_index | eval var = dateField - 1 Day", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 m", + "query": "from a_index | eval var = dateField + 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 m + 1 year", + "query": "from a_index | eval 1 day + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 m] type [duration]" + "Argument of [+] must be [date], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 m", + "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 m] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 m", + "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 m] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 m", + "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 m] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 h", + "query": "from a_index | eval 1 days", "error": [ - "EVAL does not support [date_period] in expression [1 h]" + "EVAL does not support [date_period] in expression [1 days]" ], "warning": [] }, { - "query": "from a_index | eval 1 h", + "query": "from a_index | eval 1 days", "error": [ - "EVAL does not support [date_period] in expression [1 h]" + "EVAL does not support [date_period] in expression [1 days]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 h", + "query": "from a_index | eval var = now() - 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 h", + "query": "from a_index | eval var = dateField - 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 H", + "query": "from a_index | eval var = dateField - 1 DAYS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 H", + "query": "from a_index | eval var = dateField - 1 Days", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 h", + "query": "from a_index | eval var = dateField + 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 h + 1 year", + "query": "from a_index | eval 1 days + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 h] type [duration]" + "Argument of [+] must be [date], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 h", + "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 h] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 h", + "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 h] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 h", + "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 h] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 d", + "query": "from a_index | eval 1 hour", "error": [ - "EVAL does not support [date_period] in expression [1 d]" + "EVAL does not support [date_period] in expression [1 hour]" ], "warning": [] }, { - "query": "from a_index | eval 1 d", + "query": "from a_index | eval 1 hour", "error": [ - "EVAL does not support [date_period] in expression [1 d]" + "EVAL does not support [date_period] in expression [1 hour]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 d", + "query": "from a_index | eval var = now() - 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 d", + "query": "from a_index | eval var = dateField - 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 D", + "query": "from a_index | eval var = dateField - 1 HOUR", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 D", + "query": "from a_index | eval var = dateField - 1 Hour", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 d", + "query": "from a_index | eval var = dateField + 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 d + 1 year", + "query": "from a_index | eval 1 hour + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 d] type [duration]" + "Argument of [+] must be [date], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 d", + "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 d] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 d", + "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 d] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 d", + "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 d] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 w", + "query": "from a_index | eval 1 hours", "error": [ - "EVAL does not support [date_period] in expression [1 w]" + "EVAL does not support [date_period] in expression [1 hours]" ], "warning": [] }, { - "query": "from a_index | eval 1 w", + "query": "from a_index | eval 1 hours", "error": [ - "EVAL does not support [date_period] in expression [1 w]" + "EVAL does not support [date_period] in expression [1 hours]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 w", + "query": "from a_index | eval var = now() - 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 w", + "query": "from a_index | eval var = dateField - 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 W", + "query": "from a_index | eval var = dateField - 1 HOURS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 W", + "query": "from a_index | eval var = dateField - 1 Hours", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 w", + "query": "from a_index | eval var = dateField + 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 w + 1 year", + "query": "from a_index | eval 1 hours + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 w] type [duration]" + "Argument of [+] must be [date], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 w", + "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 w] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 w", + "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 w] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 w", + "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 w] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 mo", + "query": "from a_index | eval 1 minute", "error": [ - "EVAL does not support [date_period] in expression [1 mo]" + "EVAL does not support [date_period] in expression [1 minute]" ], "warning": [] }, { - "query": "from a_index | eval 1 mo", + "query": "from a_index | eval 1 minute", "error": [ - "EVAL does not support [date_period] in expression [1 mo]" + "EVAL does not support [date_period] in expression [1 minute]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 mo", + "query": "from a_index | eval var = now() - 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 mo", + "query": "from a_index | eval var = dateField - 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MO", + "query": "from a_index | eval var = dateField - 1 MINUTE", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Mo", + "query": "from a_index | eval var = dateField - 1 Minute", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 mo", + "query": "from a_index | eval var = dateField + 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 mo + 1 year", + "query": "from a_index | eval 1 minute + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 mo] type [duration]" + "Argument of [+] must be [date], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 mo", + "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 mo] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 mo", + "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 mo] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 mo", + "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 mo] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 q", + "query": "from a_index | eval 1 minutes", "error": [ - "EVAL does not support [date_period] in expression [1 q]" + "EVAL does not support [date_period] in expression [1 minutes]" ], "warning": [] }, { - "query": "from a_index | eval 1 q", + "query": "from a_index | eval 1 minutes", "error": [ - "EVAL does not support [date_period] in expression [1 q]" + "EVAL does not support [date_period] in expression [1 minutes]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 q", + "query": "from a_index | eval var = now() - 1 minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 q", + "query": "from a_index | eval var = dateField - 1 minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Q", + "query": "from a_index | eval var = dateField - 1 MINUTES", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Q", + "query": "from a_index | eval var = dateField - 1 Minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 q", + "query": "from a_index | eval var = dateField + 1 minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 q + 1 year", + "query": "from a_index | eval 1 minutes + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 q] type [duration]" + "Argument of [+] must be [date], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 q", + "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 q] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 q", + "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 q] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 q", + "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 q] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 y", + "query": "from a_index | eval 1 second", "error": [ - "EVAL does not support [date_period] in expression [1 y]" + "EVAL does not support [date_period] in expression [1 second]" ], "warning": [] }, { - "query": "from a_index | eval 1 y", + "query": "from a_index | eval 1 second", "error": [ - "EVAL does not support [date_period] in expression [1 y]" + "EVAL does not support [date_period] in expression [1 second]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 y", + "query": "from a_index | eval var = now() - 1 second", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 y", + "query": "from a_index | eval var = dateField - 1 second", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Y", + "query": "from a_index | eval var = dateField - 1 SECOND", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Y", + "query": "from a_index | eval var = dateField - 1 Second", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 y", + "query": "from a_index | eval var = dateField + 1 second", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 y + 1 year", + "query": "from a_index | eval 1 second + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 y] type [duration]" + "Argument of [+] must be [date], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 y", + "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 y] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 y", + "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 y] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 y", + "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 y] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 yr", + "query": "from a_index | eval 1 seconds", "error": [ - "EVAL does not support [date_period] in expression [1 yr]" + "EVAL does not support [date_period] in expression [1 seconds]" ], "warning": [] }, { - "query": "from a_index | eval 1 yr", + "query": "from a_index | eval 1 seconds", "error": [ - "EVAL does not support [date_period] in expression [1 yr]" + "EVAL does not support [date_period] in expression [1 seconds]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 yr", + "query": "from a_index | eval var = now() - 1 seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 yr", + "query": "from a_index | eval var = dateField - 1 seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YR", + "query": "from a_index | eval var = dateField - 1 SECONDS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Yr", + "query": "from a_index | eval var = dateField - 1 Seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 yr", + "query": "from a_index | eval var = dateField + 1 seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 yr + 1 year", + "query": "from a_index | eval 1 seconds + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 yr] type [duration]" + "Argument of [+] must be [date], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 yr", + "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 yr] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 yr", + "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 yr] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 yr", + "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 yr] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort ", + "query": "from a_index | eval 1 millisecond", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "EVAL does not support [date_period] in expression [1 millisecond]" ], "warning": [] }, { - "query": "from a_index | sort \"field\" ", - "error": [], + "query": "from a_index | eval 1 millisecond", + "error": [ + "EVAL does not support [date_period] in expression [1 millisecond]" + ], "warning": [] }, { - "query": "from a_index | sort wrongField ", - "error": [ - "Unknown column [wrongField]" - ], + "query": "from a_index | eval var = now() - 1 millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField, ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval var = dateField - 1 millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField, stringField", + "query": "from a_index | eval var = dateField - 1 MILLISECOND", "error": [], "warning": [] }, { - "query": "from a_index | sort \"field\" desc ", + "query": "from a_index | eval var = dateField - 1 Millisecond", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField desc ", + "query": "from a_index | eval var = dateField + 1 millisecond", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls ", + "query": "from a_index | eval 1 millisecond + 1 year", "error": [ - "SyntaxError: missing {'first', 'last'} at ''" + "Argument of [+] must be [date], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls first", - "error": [], + "query": "from a_index | eval var = now() * 1 millisecond", + "error": [ + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 millisecond] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField desc first", + "query": "from a_index | eval var = now() / 1 millisecond", "error": [ - "SyntaxError: extraneous input 'first' expecting " + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls last", - "error": [], + "query": "from a_index | eval var = now() % 1 millisecond", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 millisecond] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField desc last", + "query": "from a_index | eval 1 milliseconds", "error": [ - "SyntaxError: extraneous input 'last' expecting " + "EVAL does not support [date_period] in expression [1 milliseconds]" ], "warning": [] }, { - "query": "from a_index | sort \"field\" asc ", - "error": [], + "query": "from a_index | eval 1 milliseconds", + "error": [ + "EVAL does not support [date_period] in expression [1 milliseconds]" + ], "warning": [] }, { - "query": "from a_index | sort numberField asc ", + "query": "from a_index | eval var = now() - 1 milliseconds", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls ", - "error": [ - "SyntaxError: missing {'first', 'last'} at ''" - ], + "query": "from a_index | eval var = dateField - 1 milliseconds", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls first", + "query": "from a_index | eval var = dateField - 1 MILLISECONDS", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc first", - "error": [ - "SyntaxError: extraneous input 'first' expecting " - ], + "query": "from a_index | eval var = dateField - 1 Milliseconds", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls last", + "query": "from a_index | eval var = dateField + 1 milliseconds", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc last", + "query": "from a_index | eval 1 milliseconds + 1 year", "error": [ - "SyntaxError: extraneous input 'last' expecting " + "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField nulls first", - "error": [], + "query": "from a_index | eval var = now() * 1 milliseconds", + "error": [ + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 milliseconds] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField first", + "query": "from a_index | eval var = now() / 1 milliseconds", "error": [ - "SyntaxError: extraneous input 'first' expecting " + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField nulls last", - "error": [], + "query": "from a_index | eval var = now() % 1 milliseconds", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 milliseconds] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField last", + "query": "from a_index | eval 1 ms", "error": [ - "SyntaxError: extraneous input 'last' expecting " + "EVAL does not support [date_period] in expression [1 ms]" ], "warning": [] }, { - "query": "row a = 1 | stats COUNT(*) | sort `COUNT(*)`", - "error": [], + "query": "from a_index | eval 1 ms", + "error": [ + "EVAL does not support [date_period] in expression [1 ms]" + ], "warning": [] }, { - "query": "ROW a = 1 | STATS couNt(*) | SORT `couNt(*)`", + "query": "from a_index | eval var = now() - 1 ms", "error": [], "warning": [] }, { - "query": "from a_index | sort abs(numberField) - to_long(stringField) desc nulls first", + "query": "from a_index | eval var = dateField - 1 ms", "error": [], "warning": [] }, { - "query": "from a_index | sort sin(stringField)", - "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = dateField - 1 MS", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField + stringField", - "error": [ - "Argument of [+] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = dateField - 1 Ms", + "error": [], "warning": [] }, { - "query": "from a_index | enrich", - "error": [ - "SyntaxError: missing ENRICH_POLICY_NAME at ''" - ], + "query": "from a_index | eval var = dateField + 1 ms", + "error": [], "warning": [] }, { - "query": "from a_index | enrich _", + "query": "from a_index | eval 1 ms + 1 year", "error": [ - "Unknown policy [_]" + "Argument of [+] must be [date], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _:", + "query": "from a_index | eval var = now() * 1 ms", "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [_]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _:policy", + "query": "from a_index | eval var = now() / 1 ms", "error": [ - "Unrecognized value [_] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich :policy", + "query": "from a_index | eval var = now() % 1 ms", "error": [ - "SyntaxError: token recognition error at: ':'" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich any:", + "query": "from a_index | eval 1 s", "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [any]" + "EVAL does not support [date_period] in expression [1 s]" ], "warning": [] }, { - "query": "from a_index | enrich _any:", + "query": "from a_index | eval 1 s", "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [_any]" + "EVAL does not support [date_period] in expression [1 s]" ], "warning": [] }, { - "query": "from a_index | enrich any:policy", - "error": [ - "Unrecognized value [any] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" - ], + "query": "from a_index | eval var = now() - 1 s", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy ", + "query": "from a_index | eval var = dateField - 1 s", "error": [], "warning": [] }, { - "query": "from a_index | enrich `this``is fine`", - "error": [ - "SyntaxError: extraneous input 'fine`' expecting ", - "Unknown policy [`this``is]" - ], + "query": "from a_index | eval var = dateField - 1 S", + "error": [], "warning": [] }, { - "query": "from a_index | enrich this is fine", - "error": [ - "SyntaxError: mismatched input 'is' expecting ", - "Unknown policy [this]" - ], + "query": "from a_index | eval var = dateField - 1 S", + "error": [], "warning": [] }, { - "query": "from a_index | enrich _any:policy ", + "query": "from a_index | eval var = dateField + 1 s", "error": [], "warning": [] }, { - "query": "from a_index | enrich _any : policy ", + "query": "from a_index | eval 1 s + 1 year", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_any]" + "Argument of [+] must be [date], found value [1 s] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _any: policy ", + "query": "from a_index | eval var = now() * 1 s", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_any]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 s] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _any:policy ", - "error": [], - "warning": [] - }, - { - "query": "from a_index | enrich _ANY:policy ", - "error": [], + "query": "from a_index | eval var = now() / 1 s", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 s] type [duration]" + ], "warning": [] }, { - "query": "from a_index | enrich _coordinator:policy ", - "error": [], + "query": "from a_index | eval var = now() % 1 s", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 s] type [duration]" + ], "warning": [] }, { - "query": "from a_index | enrich _coordinator : policy ", + "query": "from a_index | eval 1 m", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_coordinator]" + "EVAL does not support [date_period] in expression [1 m]" ], "warning": [] }, { - "query": "from a_index | enrich _coordinator: policy ", + "query": "from a_index | eval 1 m", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_coordinator]" + "EVAL does not support [date_period] in expression [1 m]" ], "warning": [] }, { - "query": "from a_index | enrich _coordinator:policy ", + "query": "from a_index | eval var = now() - 1 m", "error": [], "warning": [] }, { - "query": "from a_index | enrich _COORDINATOR:policy ", + "query": "from a_index | eval var = dateField - 1 m", "error": [], "warning": [] }, { - "query": "from a_index | enrich _remote:policy ", + "query": "from a_index | eval var = dateField - 1 M", "error": [], "warning": [] }, { - "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 | enrich _remote: policy ", - "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_remote]" - ], - "warning": [] - }, - { - "query": "from a_index | enrich _remote:policy ", + "query": "from a_index | eval var = dateField - 1 M", "error": [], "warning": [] }, { - "query": "from a_index | enrich _REMOTE:policy ", + "query": "from a_index | eval var = dateField + 1 m", "error": [], "warning": [] }, { - "query": "from a_index | enrich _unknown:policy", + "query": "from a_index | eval 1 m + 1 year", "error": [ - "Unrecognized value [_unknown] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + "Argument of [+] must be [date], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index |enrich missing-policy ", + "query": "from a_index | eval var = now() * 1 m", "error": [ - "Unknown policy [missing-policy]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index |enrich policy on ", + "query": "from a_index | eval var = now() / 1 m", "error": [ - "SyntaxError: missing ID_PATTERN at ''" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on b ", + "query": "from a_index | eval var = now() % 1 m", "error": [ - "Unknown column [b]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on `this``is fine`", + "query": "from a_index | eval 1 h", "error": [ - "Unknown column [this`is fine]" + "EVAL does not support [date_period] in expression [1 h]" ], "warning": [] }, { - "query": "from a_index | enrich policy on this is fine", + "query": "from a_index | eval 1 h", "error": [ - "SyntaxError: mismatched input 'is' expecting ", - "Unknown column [this]" + "EVAL does not support [date_period] in expression [1 h]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with ", - "error": [ - "SyntaxError: mismatched input '' expecting ID_PATTERN" - ], + "query": "from a_index | eval var = now() - 1 h", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 ", - "error": [ - "Unknown column [var0]" - ], + "query": "from a_index | eval var = dateField - 1 h", + "error": [], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = ", - "error": [ - "SyntaxError: missing ID_PATTERN at ''", - "Unknown column [var0]" - ], + "query": "from a_index | eval var = dateField - 1 H", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = c ", - "error": [ - "Unknown column [var0]", - "Unknown column [c]" - ], + "query": "from a_index | eval var = dateField - 1 H", + "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 | eval var = dateField + 1 h", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval 1 h + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 h] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, var1 ", + "query": "from a_index | eval var = now() * 1 h", "error": [ - "Unknown column [var1]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 h] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField ", - "error": [], + "query": "from a_index | eval var = now() / 1 h", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 h] type [duration]" + ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, yetAnotherField ", - "error": [], + "query": "from a_index | eval var = now() % 1 h", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 h] type [duration]" + ], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = otherField, var1 = ", + "query": "from a_index | eval 1 d", "error": [ - "SyntaxError: missing ID_PATTERN at ''", - "Unknown column [var1]" + "EVAL does not support [date_period] in expression [1 d]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, var1 = yetAnotherField", - "error": [], + "query": "from a_index | eval 1 d", + "error": [ + "EVAL does not support [date_period] in expression [1 d]" + ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, `this``is fine` = yetAnotherField", + "query": "from a_index | eval var = now() - 1 d", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy with ", - "error": [ - "SyntaxError: mismatched input '' expecting ID_PATTERN" - ], + "query": "from a_index | eval var = dateField - 1 d", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy with otherField", + "query": "from a_index | eval var = dateField - 1 D", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy | eval otherField", + "query": "from a_index | eval var = dateField - 1 D", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy with var0 = otherField | eval var0", + "query": "from a_index | eval var = dateField + 1 d", "error": [], "warning": [] }, { - "query": "from a_index | enrich my-pol*", + "query": "from a_index | eval 1 d + 1 year", "error": [ - "Using wildcards (*) in ENRICH is not allowed [my-pol*]" + "Argument of [+] must be [date], found value [1 d] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval stringField = 5", - "error": [], - "warning": [ - "Column [stringField] of type string has been overwritten as new type: number" - ] - }, - { - "query": "from a_index | eval numberField = \"5\"", - "error": [], - "warning": [ - "Column [numberField] of type number has been overwritten as new type: string" - ] + "query": "from a_index | eval var = now() * 1 d", + "error": [ + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 d] type [duration]" + ], + "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | keep ```round(numberField) + 1`` + 1`", - "error": [], + "query": "from a_index | eval var = now() / 1 d", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 d] type [duration]" + ], "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`", - "error": [], + "query": "from a_index | eval var = now() % 1 d", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 d] type [duration]" + ], "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`", - "error": [], + "query": "from a_index | eval 1 w", + "error": [ + "EVAL does not support [date_period] in expression [1 w]" + ], "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 | eval 1 w", + "error": [ + "EVAL does not support [date_period] in expression [1 w]" + ], "warning": [] }, { - "query": "from a_index | eval 1::string", + "query": "from a_index | eval var = now() - 1 w", "error": [], "warning": [] }, { - "query": "from a_index | eval 1::string::long::double", + "query": "from a_index | eval var = dateField - 1 w", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(\"23\"::double)", - "error": [ - "Argument of [trim] must be [string], found value [\"23\"::double] type [double]" - ], + "query": "from a_index | eval var = dateField - 1 W", + "error": [], "warning": [] }, { - "query": "from a_index | eval trim(23::string)", + "query": "from a_index | eval var = dateField - 1 W", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + \"2\"::long", + "query": "from a_index | eval var = dateField + 1 w", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + \"2\"", + "query": "from a_index | eval 1 w + 1 year", "error": [ - "Argument of [+] must be [number], found value [\"2\"] type [string]" + "Argument of [+] must be [date], found value [1 w] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval trim(to_double(\"23\")::string::double::long::string::double)", + "query": "from a_index | eval var = now() * 1 w", "error": [ - "Argument of [trim] must be [string], found value [to_double(\"23\")::string::double::long::string::double] type [double]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 w] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::long)", - "error": [], + "query": "from a_index | eval var = now() / 1 w", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 w] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::unsigned_long)", - "error": [], + "query": "from a_index | eval var = now() % 1 w", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 w] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::int)", - "error": [], + "query": "from a_index | eval 1 mo", + "error": [ + "EVAL does not support [date_period] in expression [1 mo]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::integer)", - "error": [], + "query": "from a_index | eval 1 mo", + "error": [ + "EVAL does not support [date_period] in expression [1 mo]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::double)", + "query": "from a_index | eval var = now() - 1 mo", "error": [], "warning": [] }, { - "query": "from a_index | eval TRIM(23::string)", + "query": "from a_index | eval var = dateField - 1 mo", "error": [], "warning": [] }, { - "query": "from a_index | eval TRIM(23::text)", + "query": "from a_index | eval var = dateField - 1 MO", "error": [], "warning": [] }, { - "query": "from a_index | eval TRIM(23::keyword)", + "query": "from a_index | eval var = dateField - 1 Mo", "error": [], "warning": [] }, { - "query": "from a_index | eval true AND \"false\"::boolean", + "query": "from a_index | eval var = dateField + 1 mo", "error": [], "warning": [] }, { - "query": "from a_index | eval true AND \"false\"::bool", - "error": [], + "query": "from a_index | eval 1 mo + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 mo] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval true AND \"false\"", + "query": "from a_index | eval var = now() * 1 mo", "error": [ - "Argument of [and] must be [boolean], found value [\"false\"] type [string]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 mo] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval to_lower(trim(numberField)::string)", + "query": "from a_index | eval var = now() / 1 mo", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 mo] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval to_upper(trim(numberField)::string::string::string::string)", + "query": "from a_index | eval var = now() % 1 mo", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 mo] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval to_lower(to_upper(trim(numberField)::string)::string)", + "query": "from a_index | eval 1 q", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "EVAL does not support [date_period] in expression [1 q]" ], "warning": [] }, { - "query": "row var = date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", - "error": [], + "query": "from a_index | eval 1 q", + "error": [ + "EVAL does not support [date_period] in expression [1 q]" + ], "warning": [] }, { - "query": "row var = date_diff(\"mm\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | eval var = now() - 1 q", "error": [], "warning": [] }, { - "query": "row var = date_diff(\"bogus\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | eval var = dateField - 1 q", "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 | eval var = dateField - 1 Q", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", dateField, \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | eval var = dateField - 1 Q", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", dateField)", + "query": "from a_index | eval var = dateField + 1 q", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", stringField, dateField)", + "query": "from a_index | eval 1 q + 1 year", "error": [ - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "Argument of [+] must be [date], found value [1 q] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", dateField, stringField)", + "query": "from a_index | eval var = now() * 1 q", "error": [ - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 q] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", - "error": [], + "query": "from a_index | eval var = now() / 1 q", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 q] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", to_datetime(stringField), to_datetime(stringField))", - "error": [], + "query": "from a_index | eval var = now() % 1 q", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 q] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval date_diff(numberField, stringField, stringField)", + "query": "from a_index | eval 1 y", "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]" + "EVAL does not support [date_period] in expression [1 y]" ], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField, extraArg)", + "query": "from a_index | eval 1 y", "error": [ - "Error: [date_diff] function expects exactly 3 arguments, got 4." + "EVAL does not support [date_period] in expression [1 y]" ], "warning": [] }, { - "query": "from a_index | sort date_diff(\"year\", dateField, dateField)", + "query": "from a_index | eval var = now() - 1 y", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", to_datetime(dateField), to_datetime(dateField))", + "query": "from a_index | eval var = dateField - 1 y", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [date_diff] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]", - "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = dateField - 1 Y", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(null, null, null)", + "query": "from a_index | eval var = dateField - 1 Y", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)", + "query": "from a_index | eval var = dateField + 1 y", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", \"2022\", \"2022\")", - "error": [], + "query": "from a_index | eval 1 y + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 y] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", concat(\"20\", \"22\"), concat(\"20\", \"22\"))", + "query": "from a_index | eval var = now() * 1 y", "error": [ - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [string]", - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 y] type [duration]" ], "warning": [] }, { - "query": "row var = abs(5)", - "error": [], + "query": "from a_index | eval var = now() / 1 y", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 y] type [duration]" + ], "warning": [] }, { - "query": "row abs(5)", - "error": [], + "query": "from a_index | eval var = now() % 1 y", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 y] type [duration]" + ], "warning": [] }, { - "query": "row var = abs(to_integer(\"a\"))", - "error": [], + "query": "from a_index | eval 1 yr", + "error": [ + "EVAL does not support [date_period] in expression [1 yr]" + ], "warning": [] }, { - "query": "row var = abs(\"a\")", + "query": "from a_index | eval 1 yr", "error": [ - "Argument of [abs] must be [number], found value [\"a\"] type [string]" + "EVAL does not support [date_period] in expression [1 yr]" ], "warning": [] }, { - "query": "from a_index | where abs(numberField) > 0", + "query": "from a_index | eval var = now() - 1 yr", "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 var = dateField - 1 yr", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = abs(numberField)", + "query": "from a_index | eval var = dateField - 1 YR", "error": [], "warning": [] }, { - "query": "from a_index | eval abs(numberField)", + "query": "from a_index | eval var = dateField - 1 Yr", "error": [], "warning": [] }, { - "query": "from a_index | eval var = abs(to_integer(stringField))", + "query": "from a_index | eval var = dateField + 1 yr", "error": [], "warning": [] }, { - "query": "from a_index | eval abs(stringField)", + "query": "from a_index | eval 1 yr + 1 year", "error": [ - "Argument of [abs] must be [number], found value [stringField] type [string]" + "Argument of [+] must be [date], found value [1 yr] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval abs(numberField, extraArg)", + "query": "from a_index | eval var = now() * 1 yr", "error": [ - "Error: [abs] function expects exactly one argument, got 2." + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 yr] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = abs(*)", + "query": "from a_index | eval var = now() / 1 yr", "error": [ - "Using wildcards (*) in abs is not allowed" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 yr] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort abs(numberField)", - "error": [], - "warning": [] - }, - { - "query": "row var = abs(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = abs(true)", + "query": "from a_index | eval var = now() % 1 yr", "error": [ - "Argument of [abs] must be [number], found value [true] type [boolean]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 yr] type [duration]" ], "warning": [] }, { - "query": "from a_index | where abs(booleanField) > 0", + "query": "from a_index | sort ", "error": [ - "Argument of [abs] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval var = abs(to_integer(booleanField))", + "query": "from a_index | sort \"field\" ", "error": [], "warning": [] }, { - "query": "from a_index | eval abs(booleanField)", + "query": "from a_index | sort wrongField ", "error": [ - "Argument of [abs] must be [number], found value [booleanField] type [boolean]" + "Unknown column [wrongField]" ], "warning": [] }, { - "query": "from a_index | eval abs(null)", - "error": [], + "query": "from a_index | sort doubleField, ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "row nullVar = null | eval abs(nullVar)", + "query": "from a_index | sort doubleField, textField", "error": [], "warning": [] }, { - "query": "row var = acos(5)", + "query": "from a_index | sort \"field\" desc ", "error": [], "warning": [] }, { - "query": "row acos(5)", + "query": "from a_index | sort doubleField desc ", "error": [], "warning": [] }, { - "query": "row var = acos(to_integer(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(\"a\")", + "query": "from a_index | sort doubleField desc nulls ", "error": [ - "Argument of [acos] must be [number], found value [\"a\"] type [string]" + "SyntaxError: missing {'first', 'last'} at ''" ], "warning": [] }, { - "query": "from a_index | where acos(numberField) > 0", + "query": "from a_index | sort doubleField desc nulls first", "error": [], "warning": [] }, { - "query": "from a_index | where acos(stringField) > 0", + "query": "from a_index | sort doubleField desc first", "error": [ - "Argument of [acos] must be [number], found value [stringField] type [string]" + "SyntaxError: extraneous input 'first' expecting " ], "warning": [] }, { - "query": "from a_index | eval var = acos(numberField)", + "query": "from a_index | sort doubleField desc nulls last", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(numberField)", - "error": [], + "query": "from a_index | sort doubleField desc last", + "error": [ + "SyntaxError: extraneous input 'last' expecting " + ], "warning": [] }, { - "query": "from a_index | eval var = acos(to_integer(stringField))", + "query": "from a_index | sort \"field\" asc ", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(stringField)", - "error": [ - "Argument of [acos] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval acos(numberField, extraArg)", - "error": [ - "Error: [acos] function expects exactly one argument, got 2." - ], + "query": "from a_index | sort doubleField asc ", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = acos(*)", + "query": "from a_index | sort doubleField asc nulls ", "error": [ - "Using wildcards (*) in acos is not allowed" + "SyntaxError: missing {'first', 'last'} at ''" ], "warning": [] }, { - "query": "from a_index | sort acos(numberField)", + "query": "from a_index | sort doubleField asc nulls first", "error": [], "warning": [] }, { - "query": "row var = acos(to_integer(true))", - "error": [], + "query": "from a_index | sort doubleField asc first", + "error": [ + "SyntaxError: extraneous input 'first' expecting " + ], "warning": [] }, { - "query": "row var = acos(true)", - "error": [ - "Argument of [acos] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | sort doubleField asc nulls last", + "error": [], "warning": [] }, { - "query": "from a_index | where acos(booleanField) > 0", + "query": "from a_index | sort doubleField asc last", "error": [ - "Argument of [acos] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: extraneous input 'last' expecting " ], "warning": [] }, { - "query": "from a_index | eval var = acos(to_integer(booleanField))", + "query": "from a_index | sort doubleField nulls first", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(booleanField)", + "query": "from a_index | sort doubleField first", "error": [ - "Argument of [acos] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: extraneous input 'first' expecting " ], "warning": [] }, { - "query": "from a_index | eval acos(null)", + "query": "from a_index | sort doubleField nulls last", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval acos(nullVar)", - "error": [], + "query": "from a_index | sort doubleField last", + "error": [ + "SyntaxError: extraneous input 'last' expecting " + ], "warning": [] }, { - "query": "row var = asin(5)", + "query": "row a = 1 | stats COUNT(*) | sort `COUNT(*)`", "error": [], "warning": [] }, { - "query": "row asin(5)", + "query": "ROW a = 1 | STATS couNt(*) | SORT `couNt(*)`", "error": [], "warning": [] }, { - "query": "row var = asin(to_integer(\"a\"))", + "query": "from a_index | sort abs(doubleField) - to_long(textField) desc nulls first", "error": [], "warning": [] }, { - "query": "row var = asin(\"a\")", + "query": "from a_index | sort sin(textField)", "error": [ - "Argument of [asin] must be [number], found value [\"a\"] type [string]" + "Argument of [sin] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | where asin(numberField) > 0", - "error": [], + "query": "from a_index | sort doubleField + textField", + "error": [ + "Argument of [+] must be [double], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | where asin(stringField) > 0", + "query": "from a_index | enrich", "error": [ - "Argument of [asin] must be [number], found value [stringField] type [string]" + "SyntaxError: missing ENRICH_POLICY_NAME at ''" ], "warning": [] }, { - "query": "from a_index | eval var = asin(numberField)", - "error": [], + "query": "from a_index | enrich _", + "error": [ + "Unknown policy [_]" + ], "warning": [] }, { - "query": "from a_index | eval asin(numberField)", - "error": [], + "query": "from a_index | enrich _:", + "error": [ + "SyntaxError: token recognition error at: ':'", + "Unknown policy [_]" + ], "warning": [] }, { - "query": "from a_index | eval var = asin(to_integer(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 asin(stringField)", + "query": "from a_index | enrich :policy", "error": [ - "Argument of [asin] must be [number], found value [stringField] type [string]" + "SyntaxError: token recognition error at: ':'" ], "warning": [] }, { - "query": "from a_index | eval asin(numberField, extraArg)", + "query": "from a_index | enrich any:", "error": [ - "Error: [asin] function expects exactly one argument, got 2." + "SyntaxError: token recognition error at: ':'", + "Unknown policy [any]" ], "warning": [] }, { - "query": "from a_index | eval var = asin(*)", + "query": "from a_index | enrich _any:", "error": [ - "Using wildcards (*) in asin is not allowed" + "SyntaxError: token recognition error at: ':'", + "Unknown policy [_any]" ], "warning": [] }, { - "query": "from a_index | sort asin(numberField)", - "error": [], + "query": "from a_index | enrich any:policy", + "error": [ + "Unrecognized value [any] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + ], "warning": [] }, { - "query": "row var = asin(to_integer(true))", + "query": "from a_index | enrich policy ", "error": [], "warning": [] }, { - "query": "row var = asin(true)", + "query": "from a_index | enrich `this``is fine`", "error": [ - "Argument of [asin] must be [number], found value [true] type [boolean]" + "SyntaxError: extraneous input 'fine`' expecting ", + "Unknown policy [`this``is]" ], "warning": [] }, { - "query": "from a_index | where asin(booleanField) > 0", + "query": "from a_index | enrich this is fine", "error": [ - "Argument of [asin] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: mismatched input 'is' expecting ", + "Unknown policy [this]" ], "warning": [] }, { - "query": "from a_index | eval var = asin(to_integer(booleanField))", + "query": "from a_index | enrich _any:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval asin(booleanField)", + "query": "from a_index | enrich _any : policy ", "error": [ - "Argument of [asin] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_any]" ], "warning": [] }, { - "query": "from a_index | eval asin(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval asin(nullVar)", - "error": [], + "query": "from a_index | enrich _any: policy ", + "error": [ + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_any]" + ], "warning": [] }, { - "query": "row var = atan(5)", + "query": "from a_index | enrich _any:policy ", "error": [], "warning": [] }, { - "query": "row atan(5)", + "query": "from a_index | enrich _ANY:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(to_integer(\"a\"))", + "query": "from a_index | enrich _coordinator:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(\"a\")", + "query": "from a_index | enrich _coordinator : policy ", "error": [ - "Argument of [atan] must be [number], found value [\"a\"] type [string]" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_coordinator]" ], "warning": [] }, { - "query": "from a_index | where atan(numberField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan(stringField) > 0", + "query": "from a_index | enrich _coordinator: policy ", "error": [ - "Argument of [atan] must be [number], found value [stringField] type [string]" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_coordinator]" ], "warning": [] }, { - "query": "from a_index | eval var = atan(numberField)", + "query": "from a_index | enrich _coordinator:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval atan(numberField)", + "query": "from a_index | enrich _COORDINATOR:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = atan(to_integer(stringField))", + "query": "from a_index | enrich _remote:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval atan(stringField)", - "error": [ - "Argument of [atan] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval atan(numberField, extraArg)", + "query": "from a_index | enrich _remote : policy ", "error": [ - "Error: [atan] function expects exactly one argument, got 2." + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_remote]" ], "warning": [] }, { - "query": "from a_index | eval var = atan(*)", + "query": "from a_index | enrich _remote: policy ", "error": [ - "Using wildcards (*) in atan is not allowed" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_remote]" ], "warning": [] }, { - "query": "from a_index | sort atan(numberField)", + "query": "from a_index | enrich _remote:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(to_integer(true))", + "query": "from a_index | enrich _REMOTE:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(true)", + "query": "from a_index | enrich _unknown:policy", "error": [ - "Argument of [atan] must be [number], found value [true] type [boolean]" + "Unrecognized value [_unknown] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" ], "warning": [] }, { - "query": "from a_index | where atan(booleanField) > 0", + "query": "from a_index |enrich missing-policy ", "error": [ - "Argument of [atan] must be [number], found value [booleanField] type [boolean]" + "Unknown policy [missing-policy]" ], "warning": [] }, { - "query": "from a_index | eval var = atan(to_integer(booleanField))", - "error": [], + "query": "from a_index |enrich policy on ", + "error": [ + "SyntaxError: missing ID_PATTERN at ''" + ], "warning": [] }, { - "query": "from a_index | eval atan(booleanField)", + "query": "from a_index | enrich policy on b ", "error": [ - "Argument of [atan] must be [number], found value [booleanField] type [boolean]" + "Unknown column [b]" ], "warning": [] }, { - "query": "from a_index | eval atan(null)", - "error": [], + "query": "from a_index | enrich policy on `this``is fine`", + "error": [ + "Unknown column [this`is fine]" + ], "warning": [] }, { - "query": "row nullVar = null | eval atan(nullVar)", - "error": [], + "query": "from a_index | enrich policy on this is fine", + "error": [ + "SyntaxError: mismatched input 'is' expecting ", + "Unknown column [this]" + ], "warning": [] }, { - "query": "row var = atan2(5, 5)", - "error": [], + "query": "from a_index | enrich policy on textField with ", + "error": [ + "SyntaxError: mismatched input '' expecting ID_PATTERN" + ], "warning": [] }, { - "query": "row atan2(5, 5)", - "error": [], + "query": "from a_index | enrich policy on textField with var0 ", + "error": [ + "Unknown column [var0]" + ], "warning": [] }, { - "query": "row var = atan2(to_integer(\"a\"), to_integer(\"a\"))", - "error": [], + "query": "from a_index |enrich policy on doubleField with var0 = ", + "error": [ + "SyntaxError: missing ID_PATTERN at ''", + "Unknown column [var0]" + ], "warning": [] }, { - "query": "row var = atan2(\"a\", \"a\")", + "query": "from a_index | enrich policy on textField with var0 = c ", "error": [ - "Argument of [atan2] must be [number], found value [\"a\"] type [string]", - "Argument of [atan2] must be [number], found value [\"a\"] type [string]" + "Unknown column [var0]", + "Unknown column [c]" ], "warning": [] }, { - "query": "from a_index | where atan2(numberField, numberField) > 0", - "error": [], + "query": "from a_index |enrich policy on doubleField with var0 = , ", + "error": [ + "SyntaxError: missing ID_PATTERN at ','", + "SyntaxError: mismatched input '' expecting ID_PATTERN", + "Unknown column [var0]" + ], "warning": [] }, { - "query": "from a_index | where atan2(stringField, stringField) > 0", + "query": "from a_index | enrich policy on textField with var0 = otherField, var1 ", "error": [ - "Argument of [atan2] must be [number], found value [stringField] type [string]", - "Argument of [atan2] must be [number], found value [stringField] type [string]" + "Unknown column [var1]" ], "warning": [] }, { - "query": "from a_index | eval var = atan2(numberField, numberField)", + "query": "from a_index | enrich policy on textField with var0 = otherField ", "error": [], "warning": [] }, { - "query": "from a_index | eval atan2(numberField, numberField)", + "query": "from a_index | enrich policy on textField with var0 = otherField, yetAnotherField ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = atan2(to_integer(stringField), to_integer(stringField))", + "query": "from a_index |enrich policy on doubleField with var0 = otherField, var1 = ", + "error": [ + "SyntaxError: missing ID_PATTERN at ''", + "Unknown column [var1]" + ], + "warning": [] + }, + { + "query": "from a_index | enrich policy on textField with var0 = otherField, var1 = yetAnotherField", "error": [], "warning": [] }, { - "query": "from a_index | eval atan2(stringField, stringField)", - "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 | enrich policy on textField with var0 = otherField, `this``is fine` = yetAnotherField", + "error": [], "warning": [] }, { - "query": "from a_index | eval atan2(numberField, numberField, extraArg)", + "query": "from a_index | enrich policy with ", "error": [ - "Error: [atan2] function expects exactly 2 arguments, got 3." + "SyntaxError: mismatched input '' expecting ID_PATTERN" ], "warning": [] }, { - "query": "from a_index | sort atan2(numberField, numberField)", + "query": "from a_index | enrich policy with otherField", "error": [], "warning": [] }, { - "query": "row var = atan2(to_integer(true), to_integer(true))", + "query": "from a_index | enrich policy | eval otherField", "error": [], "warning": [] }, { - "query": "row var = atan2(true, true)", - "error": [ - "Argument of [atan2] must be [number], found value [true] type [boolean]", - "Argument of [atan2] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | enrich policy with var0 = otherField | eval var0", + "error": [], "warning": [] }, { - "query": "from a_index | where atan2(booleanField, booleanField) > 0", + "query": "from a_index | enrich my-pol*", "error": [ - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]", - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]" + "Using wildcards (*) in ENRICH is not allowed [my-pol*]" ], "warning": [] }, { - "query": "from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval textField = 5", "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(booleanField, booleanField)", - "error": [ - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]", - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] + "warning": [ + "Column [textField] of type text has been overwritten as new type: integer" + ] }, { - "query": "from a_index | eval atan2(null, null)", + "query": "from a_index | eval doubleField = \"5\"", "error": [], - "warning": [] + "warning": [ + "Column [doubleField] of type double has been overwritten as new type: string" + ] }, { - "query": "row nullVar = null | eval atan2(nullVar, nullVar)", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | keep ```round(doubleField) + 1`` + 1`", "error": [], "warning": [] }, { - "query": "row var = case(true, \"a\")", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | eval ```round(doubleField) + 1`` + 1` + 1 | keep ```````round(doubleField) + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "row case(true, \"a\")", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | eval ```round(doubleField) + 1`` + 1` + 1 | eval ```````round(doubleField) + 1```` + 1`` + 1` + 1 | keep ```````````````round(doubleField) + 1```````` + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "from a_index | eval var = case(booleanField, stringField)", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | eval ```round(doubleField) + 1`` + 1` + 1 | eval ```````round(doubleField) + 1```` + 1`` + 1` + 1 | eval ```````````````round(doubleField) + 1```````` + 1```` + 1`` + 1` + 1 | keep ```````````````````````````````round(doubleField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "from a_index | eval case(booleanField, stringField)", + "query": "from a_index | eval 1::keyword", "error": [], "warning": [] }, { - "query": "from a_index | sort case(booleanField, stringField)", + "query": "from a_index | eval 1::keyword::long::double", "error": [], "warning": [] }, { - "query": "row var = case(to_cartesianpoint(\"POINT (30 10)\"), true)", + "query": "from a_index | eval trim(\"23\"::double)", "error": [ - "Argument of [case] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Argument of [trim] must be [keyword], found value [\"23\"::double] type [double]" ], "warning": [] }, { - "query": "from a_index | eval case(null, null)", + "query": "from a_index | eval trim(23::keyword)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval case(nullVar, nullVar)", + "query": "from a_index | eval 1 + \"2\"::long", "error": [], "warning": [] }, { - "query": "row var = ceil(5)", + "query": "from a_index | eval 1 + \"2\"::LONG", "error": [], "warning": [] }, { - "query": "row ceil(5)", + "query": "from a_index | eval 1 + \"2\"::Long", "error": [], "warning": [] }, { - "query": "row var = ceil(to_integer(\"a\"))", + "query": "from a_index | eval 1 + \"2\"::LoNg", "error": [], "warning": [] }, { - "query": "row var = ceil(\"a\")", + "query": "from a_index | eval 1 + \"2\"", "error": [ - "Argument of [ceil] must be [number], found value [\"a\"] type [string]" + "Argument of [+] must be [date_period], found value [1] type [integer]" ], "warning": [] }, { - "query": "from a_index | where ceil(numberField) > 0", - "error": [], + "query": "from a_index | eval trim(to_double(\"23\")::keyword::double::long::keyword::double)", + "error": [ + "Argument of [trim] must be [keyword], found value [to_double(\"23\")::keyword::double::long::keyword::double] type [double]" + ], "warning": [] }, { - "query": "from a_index | where ceil(stringField) > 0", - "error": [ - "Argument of [ceil] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval CEIL(23::long)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(numberField)", + "query": "from a_index | eval CEIL(23::unsigned_long)", "error": [], "warning": [] }, { - "query": "from a_index | eval ceil(numberField)", + "query": "from a_index | eval CEIL(23::int)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(to_integer(stringField))", + "query": "from a_index | eval CEIL(23::integer)", "error": [], "warning": [] }, { - "query": "from a_index | eval ceil(stringField)", - "error": [ - "Argument of [ceil] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval CEIL(23::Integer)", + "error": [], "warning": [] }, { - "query": "from a_index | eval ceil(numberField, extraArg)", - "error": [ - "Error: [ceil] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval CEIL(23::double)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(*)", + "query": "from a_index | eval CEIL(23::DOUBLE)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval CEIL(23::doubla)", "error": [ - "Using wildcards (*) in ceil is not allowed" + "Argument of [ceil] must be [double], found value [23::doubla] type [doubla]" ], "warning": [] }, { - "query": "from a_index | sort ceil(numberField)", + "query": "from a_index | eval TRIM(23::keyword)", "error": [], "warning": [] }, { - "query": "row var = ceil(to_integer(true))", + "query": "from a_index | eval TRIM(23::text)", "error": [], "warning": [] }, { - "query": "row var = ceil(true)", + "query": "from a_index | eval TRIM(23::keyword)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval true AND \"false\"::boolean", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval true AND \"false\"::bool", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval true AND \"false\"", "error": [ - "Argument of [ceil] must be [number], found value [true] type [boolean]" + "Argument of [and] must be [boolean], found value [\"false\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where ceil(booleanField) > 0", + "query": "from a_index | eval to_lower(trim(doubleField)::keyword)", "error": [ - "Argument of [ceil] must be [number], found value [booleanField] type [boolean]" + "Argument of [trim] must be [keyword], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = ceil(to_integer(booleanField))", - "error": [], + "query": "from a_index | eval to_upper(trim(doubleField)::keyword::keyword::keyword::keyword)", + "error": [ + "Argument of [trim] must be [keyword], found value [doubleField] type [double]" + ], "warning": [] }, { - "query": "from a_index | eval ceil(booleanField)", + "query": "from a_index | eval to_lower(to_upper(trim(doubleField)::keyword)::keyword)", "error": [ - "Argument of [ceil] must be [number], found value [booleanField] type [boolean]" + "Argument of [trim] must be [keyword], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval ceil(null)", + "query": "row var = abs(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ceil(nullVar)", + "query": "row abs(5.5)", "error": [], "warning": [] }, { - "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", + "query": "row var = abs(to_double(true))", "error": [], "warning": [] }, { - "query": "row cidr_match(to_ip(\"127.0.0.1\"), \"a\")", + "query": "row var = abs(5)", + "error": [], + "warning": [] + }, + { + "query": "row abs(5)", "error": [], "warning": [] }, { - "query": "row var = cidr_match(to_ip(\"a\"), to_string(\"a\"))", + "query": "row var = abs(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = cidr_match(\"a\", 5)", + "query": "row var = abs(true)", "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 [abs] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(ipField, stringField)", + "query": "from a_index | where abs(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval cidr_match(ipField, stringField)", - "error": [], + "query": "from a_index | where abs(booleanField) > 0", + "error": [ + "Argument of [abs] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(to_ip(stringField), to_string(stringField))", + "query": "from a_index | where abs(integerField) > 0", "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]" - ], + "query": "from a_index | where abs(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort cidr_match(ipField, stringField)", + "query": "from a_index | where abs(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = cidr_match(to_ip(to_ip(\"127.0.0.1\")), to_string(true))", + "query": "from a_index | eval var = abs(doubleField)", "error": [], "warning": [] }, { - "query": "row var = cidr_match(true, true)", - "error": [ - "Argument of [cidr_match] must be [ip], found value [true] type [boolean]", - "Argument of [cidr_match] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval abs(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))", + "query": "from a_index | eval var = abs(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval cidr_match(booleanField, booleanField)", + "query": "from a_index | eval abs(booleanField)", "error": [ - "Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]", - "Argument of [cidr_match] must be [string], found value [booleanField] type [boolean]" + "Argument of [abs] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval cidr_match(null, null)", - "error": [], + "query": "from a_index | eval var = abs(*)", + "error": [ + "Using wildcards (*) in abs is not allowed" + ], "warning": [] }, { - "query": "row nullVar = null | eval cidr_match(nullVar, nullVar)", + "query": "from a_index | eval var = abs(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(5)", + "query": "from a_index | eval abs(integerField)", "error": [], "warning": [] }, { - "query": "row coalesce(5)", + "query": "from a_index | eval var = abs(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_integer(true))", + "query": "from a_index | eval var = abs(longField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(5, 5)", + "query": "from a_index | eval abs(longField)", "error": [], "warning": [] }, { - "query": "row coalesce(5, 5)", + "query": "from a_index | eval var = abs(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_integer(true), to_integer(true))", + "query": "from a_index | eval abs(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(now())", - "error": [], + "query": "from a_index | eval abs(doubleField, extraArg)", + "error": [ + "Error: [abs] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row coalesce(now())", + "query": "from a_index | sort abs(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_datetime(now()))", + "query": "from a_index | eval abs(null)", "error": [], "warning": [] }, { - "query": "row var = coalesce(now(), now())", + "query": "row nullVar = null | eval abs(nullVar)", "error": [], "warning": [] }, { - "query": "row coalesce(now(), now())", + "query": "row var = acos(5.5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_datetime(now()), to_datetime(now()))", + "query": "row acos(5.5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(\"a\")", + "query": "row var = acos(to_double(true))", "error": [], "warning": [] }, { - "query": "row coalesce(\"a\")", + "query": "row var = acos(5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_string(true))", + "query": "row acos(5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(\"a\", \"a\")", + "query": "row var = acos(to_integer(true))", "error": [], "warning": [] }, { - "query": "row coalesce(\"a\", \"a\")", - "error": [], + "query": "row var = acos(true)", + "error": [ + "Argument of [acos] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_string(true), to_string(true))", + "query": "from a_index | where acos(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(true)", - "error": [], + "query": "from a_index | where acos(booleanField) > 0", + "error": [ + "Argument of [acos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row coalesce(true)", + "query": "from a_index | where acos(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_boolean(true))", + "query": "from a_index | where acos(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(true, true)", + "query": "from a_index | where acos(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row coalesce(true, true)", + "query": "from a_index | eval var = acos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_boolean(true), to_boolean(true))", + "query": "from a_index | eval acos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = acos(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row coalesce(to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | eval acos(booleanField)", + "error": [ + "Argument of [acos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], + "query": "from a_index | eval var = acos(*)", + "error": [ + "Using wildcards (*) in acos is not allowed" + ], "warning": [] }, { - "query": "row var = coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = acos(integerField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval acos(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = acos(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = acos(longField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval acos(longField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = acos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval acos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval acos(doubleField, extraArg)", + "error": [ + "Error: [acos] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | sort acos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval acos(null)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row nullVar = null | eval acos(nullVar)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = asin(5.5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row asin(5.5)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = asin(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = asin(5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(\"POINT (30 10)\"))", + "query": "row asin(5)", "error": [], "warning": [] }, { - "query": "row coalesce(to_geopoint(\"POINT (30 10)\"))", + "query": "row var = asin(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], + "query": "row var = asin(true)", + "error": [ + "Argument of [asin] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | where asin(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row coalesce(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where asin(booleanField) > 0", + "error": [ + "Argument of [asin] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | where asin(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | where asin(longField) > 0", "error": [], "warning": [] }, { - "query": "row coalesce(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | where asin(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = asin(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval asin(doubleField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = asin(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | eval asin(booleanField)", + "error": [ + "Argument of [asin] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_version(\"1.0.0\"))", - "error": [], + "query": "from a_index | eval var = asin(*)", + "error": [ + "Using wildcards (*) in asin is not allowed" + ], "warning": [] }, { - "query": "row coalesce(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = asin(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_version(\"a\"))", + "query": "from a_index | eval asin(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = asin(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = asin(longField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_version(\"a\"), to_version(\"a\"))", + "query": "from a_index | eval asin(longField)", "error": [], "warning": [] }, { - "query": "from a_index | where coalesce(numberField) > 0", + "query": "from a_index | eval var = asin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where coalesce(numberField, numberField) > 0", + "query": "from a_index | eval asin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(coalesce(stringField)) > 0", - "error": [], + "query": "from a_index | eval asin(doubleField, extraArg)", + "error": [ + "Error: [asin] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | where length(coalesce(stringField, stringField)) > 0", + "query": "from a_index | sort asin(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(numberField)", + "query": "from a_index | eval asin(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(numberField)", + "query": "row nullVar = null | eval asin(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_integer(booleanField))", + "query": "row var = atan(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(numberField, numberField)", + "query": "row atan(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(numberField, numberField)", + "query": "row var = atan(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))", + "query": "row var = atan(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(dateField)", + "query": "row atan(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(dateField)", + "query": "row var = atan(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_datetime(dateField))", - "error": [], + "query": "row var = atan(true)", + "error": [ + "Argument of [atan] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(dateField, dateField)", + "query": "from a_index | where atan(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(dateField, dateField)", - "error": [], + "query": "from a_index | where atan(booleanField) > 0", + "error": [ + "Argument of [atan] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))", + "query": "from a_index | where atan(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(stringField)", + "query": "from a_index | where atan(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(stringField)", + "query": "from a_index | where atan(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_string(booleanField))", + "query": "from a_index | eval var = atan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(stringField, stringField)", + "query": "from a_index | eval atan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(stringField, stringField)", + "query": "from a_index | eval var = atan(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))", - "error": [], + "query": "from a_index | eval atan(booleanField)", + "error": [ + "Argument of [atan] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(booleanField)", - "error": [], + "query": "from a_index | eval var = atan(*)", + "error": [ + "Using wildcards (*) in atan is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval coalesce(booleanField)", + "query": "from a_index | eval var = atan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_boolean(booleanField))", + "query": "from a_index | eval atan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(booleanField, booleanField)", + "query": "from a_index | eval var = atan(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(booleanField, booleanField)", + "query": "from a_index | eval var = atan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_boolean(booleanField), to_boolean(booleanField))", + "query": "from a_index | eval atan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(ipField)", + "query": "from a_index | eval var = atan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(ipField)", + "query": "from a_index | eval atan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_ip(ipField))", - "error": [], + "query": "from a_index | eval atan(doubleField, extraArg)", + "error": [ + "Error: [atan] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(ipField, ipField)", + "query": "from a_index | sort atan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(ipField, ipField)", + "query": "from a_index | eval atan(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))", + "query": "row nullVar = null | eval atan(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianPointField)", + "query": "row var = atan2(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianPointField)", + "query": "row atan2(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField))", + "query": "row var = atan2(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianPointField, cartesianPointField)", + "query": "row var = atan2(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianPointField, cartesianPointField)", + "query": "row atan2(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = atan2(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianShapeField)", + "query": "row var = atan2(to_double(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianShapeField)", + "query": "row var = atan2(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField))", + "query": "row atan2(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)", + "query": "row var = atan2(to_integer(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)", + "query": "row var = atan2(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row atan2(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoPointField)", + "query": "row var = atan2(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(geoPointField)", + "query": "row var = atan2(to_integer(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField))", + "query": "row var = atan2(5, to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoPointField, geoPointField)", + "query": "row var = atan2(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(geoPointField, geoPointField)", - "error": [], + "query": "row var = atan2(true, true)", + "error": [ + "Argument of [atan2] must be [double], found value [true] type [boolean]", + "Argument of [atan2] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | where atan2(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoShapeField)", - "error": [], + "query": "from a_index | where atan2(booleanField, booleanField) > 0", + "error": [ + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]", + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval coalesce(geoShapeField)", + "query": "from a_index | where atan2(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField))", + "query": "from a_index | where atan2(doubleField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoShapeField, geoShapeField)", + "query": "from a_index | where atan2(doubleField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(geoShapeField, geoShapeField)", + "query": "from a_index | where atan2(integerField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | where atan2(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(versionField)", + "query": "from a_index | where atan2(integerField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(versionField)", + "query": "from a_index | where atan2(integerField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_version(stringField))", + "query": "from a_index | where atan2(longField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(versionField, versionField)", + "query": "from a_index | where atan2(longField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(versionField, versionField)", + "query": "from a_index | where atan2(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_version(stringField), to_version(stringField))", + "query": "from a_index | where atan2(longField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort coalesce(numberField)", + "query": "from a_index | where atan2(unsignedLongField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(null)", + "query": "from a_index | where atan2(unsignedLongField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval coalesce(nullVar)", + "query": "from a_index | where atan2(unsignedLongField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort coalesce(booleanField)", + "query": "from a_index | where atan2(unsignedLongField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = concat(\"a\", \"a\")", + "query": "from a_index | eval var = atan2(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row concat(\"a\", \"a\")", + "query": "from a_index | eval atan2(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = concat(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval var = atan2(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = concat(5, 5)", + "query": "from a_index | eval atan2(booleanField, booleanField)", "error": [ - "Argument of [concat] must be [string], found value [5] type [number]", - "Argument of [concat] must be [string], found value [5] type [number]" + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]", + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(concat(stringField, stringField)) > 0", + "query": "from a_index | eval var = atan2(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(concat(numberField, numberField)) > 0", - "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]", - "Argument of [concat] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval atan2(doubleField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(stringField, stringField)", + "query": "from a_index | eval var = atan2(to_double(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(stringField, stringField)", + "query": "from a_index | eval var = atan2(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(to_string(stringField), to_string(stringField))", + "query": "from a_index | eval atan2(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(numberField, numberField)", - "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]", - "Argument of [concat] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = atan2(to_double(booleanField), longField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort concat(stringField, stringField)", + "query": "from a_index | eval var = atan2(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = concat(to_string(true), to_string(true))", + "query": "from a_index | eval atan2(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = concat(true, true)", - "error": [ - "Argument of [concat] must be [string], found value [true] type [boolean]", - "Argument of [concat] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = atan2(to_double(booleanField), unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(concat(booleanField, booleanField)) > 0", - "error": [ - "Argument of [concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [concat] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(integerField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval atan2(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(booleanField, booleanField)", - "error": [ - "Argument of [concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [concat] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(to_integer(booleanField), to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval concat(null, null)", + "query": "from a_index | eval var = atan2(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval concat(nullVar, nullVar)", + "query": "from a_index | eval atan2(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = cos(5)", + "query": "from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row cos(5)", + "query": "from a_index | eval var = atan2(integerField, longField)", "error": [], "warning": [] }, { - "query": "row var = cos(to_integer(\"a\"))", + "query": "from a_index | eval atan2(integerField, longField)", "error": [], "warning": [] }, { - "query": "row var = cos(\"a\")", - "error": [ - "Argument of [cos] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = atan2(to_integer(booleanField), longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cos(numberField) > 0", + "query": "from a_index | eval var = atan2(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where cos(stringField) > 0", - "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval atan2(integerField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(numberField)", + "query": "from a_index | eval var = atan2(to_integer(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(numberField)", + "query": "from a_index | eval var = atan2(longField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(to_integer(stringField))", + "query": "from a_index | eval atan2(longField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(stringField)", - "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = atan2(longField, to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval cos(numberField, extraArg)", - "error": [ - "Error: [cos] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = atan2(longField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(*)", - "error": [ - "Using wildcards (*) in cos is not allowed" - ], + "query": "from a_index | eval atan2(longField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort cos(numberField)", + "query": "from a_index | eval var = atan2(longField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cos(to_integer(true))", + "query": "from a_index | eval var = atan2(longField, longField)", "error": [], "warning": [] }, { - "query": "row var = cos(true)", - "error": [ - "Argument of [cos] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval atan2(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cos(booleanField) > 0", - "error": [ - "Argument of [cos] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(longField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(to_integer(booleanField))", + "query": "from a_index | eval atan2(longField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(booleanField)", - "error": [ - "Argument of [cos] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(unsignedLongField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval cos(null)", + "query": "from a_index | eval atan2(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval cos(nullVar)", + "query": "from a_index | eval var = atan2(unsignedLongField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cosh(5)", + "query": "from a_index | eval var = atan2(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row cosh(5)", + "query": "from a_index | eval atan2(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row var = cosh(to_integer(\"a\"))", + "query": "from a_index | eval var = atan2(unsignedLongField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cosh(\"a\")", - "error": [ - "Argument of [cosh] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = atan2(unsignedLongField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cosh(numberField) > 0", + "query": "from a_index | eval atan2(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | where cosh(stringField) > 0", - "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = atan2(unsignedLongField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(numberField)", + "query": "from a_index | eval atan2(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(numberField)", - "error": [], + "query": "from a_index | eval atan2(doubleField, doubleField, extraArg)", + "error": [ + "Error: [atan2] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval var = cosh(to_integer(stringField))", + "query": "from a_index | sort atan2(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(stringField)", - "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval atan2(null, null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(numberField, extraArg)", - "error": [ - "Error: [cosh] function expects exactly one argument, got 2." - ], + "query": "row nullVar = null | eval atan2(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(*)", - "error": [ - "Using wildcards (*) in cosh is not allowed" - ], + "query": "row var = cbrt(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort cosh(numberField)", + "query": "row cbrt(5.5)", "error": [], "warning": [] }, { - "query": "row var = cosh(to_integer(true))", + "query": "row var = cbrt(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = cosh(true)", - "error": [ - "Argument of [cosh] must be [number], found value [true] type [boolean]" - ], + "query": "row var = cbrt(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where cosh(booleanField) > 0", - "error": [ - "Argument of [cosh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row cbrt(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(to_integer(booleanField))", + "query": "row var = cbrt(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(booleanField)", + "query": "row var = cbrt(true)", "error": [ - "Argument of [cosh] must be [number], found value [booleanField] type [boolean]" + "Argument of [cbrt] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval cosh(null)", + "query": "from a_index | where cbrt(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval cosh(nullVar)", - "error": [], + "query": "from a_index | where cbrt(booleanField) > 0", + "error": [ + "Argument of [cbrt] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "from a_index | where cbrt(integerField) > 0", "error": [], "warning": [] }, { - "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "from a_index | where cbrt(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"SOME_RANDOM_STRING\", now())", + "query": "from a_index | where cbrt(unsignedLongField) > 0", "error": [], - "warning": [ - "Invalid option [\"SOME_RANDOM_STRING\"] for date_extract. Supported options: [\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", \"ALIGNED_DAY_OF_WEEK_IN_YEAR\", \"ALIGNED_WEEK_OF_MONTH\", \"ALIGNED_WEEK_OF_YEAR\", \"AMPM_OF_DAY\", \"CLOCK_HOUR_OF_AMPM\", \"CLOCK_HOUR_OF_DAY\", \"DAY_OF_MONTH\", \"DAY_OF_WEEK\", \"DAY_OF_YEAR\", \"EPOCH_DAY\", \"ERA\", \"HOUR_OF_AMPM\", \"HOUR_OF_DAY\", \"INSTANT_SECONDS\", \"MICRO_OF_DAY\", \"MICRO_OF_SECOND\", \"MILLI_OF_DAY\", \"MILLI_OF_SECOND\", \"MINUTE_OF_DAY\", \"MINUTE_OF_HOUR\", \"MONTH_OF_YEAR\", \"NANO_OF_DAY\", \"NANO_OF_SECOND\", \"OFFSET_SECONDS\", \"PROLEPTIC_MONTH\", \"SECOND_OF_DAY\", \"SECOND_OF_MINUTE\", \"YEAR\", \"YEAR_OF_ERA\"]." - ] + "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | eval var = cbrt(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | eval cbrt(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(stringField))", + "query": "from a_index | eval var = cbrt(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(stringField, stringField)", + "query": "from a_index | eval cbrt(booleanField)", "error": [ - "Argument of [date_extract] must be [date], found value [stringField] type [string]" + "Argument of [cbrt] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", + "query": "from a_index | eval var = cbrt(*)", "error": [ - "Error: [date_extract] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in cbrt is not allowed" ], "warning": [] }, { - "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | eval var = cbrt(integerField)", "error": [], "warning": [] }, { - "query": "row var = date_extract(true, true)", - "error": [ - "Argument of [date_extract] must be [string], found value [true] type [boolean]", - "Argument of [date_extract] must be [date], found value [true] type [boolean]" - ], + "query": "from a_index | eval cbrt(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(dateField))", + "query": "from a_index | eval var = cbrt(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(booleanField, booleanField)", - "error": [ - "Argument of [date_extract] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_extract] must be [date], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = cbrt(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(null, null)", + "query": "from a_index | eval cbrt(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_extract(nullVar, nullVar)", + "query": "from a_index | eval var = cbrt(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", \"2022\")", + "query": "from a_index | eval cbrt(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", concat(\"20\", \"22\"))", + "query": "from a_index | eval cbrt(doubleField, extraArg)", "error": [ - "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Error: [cbrt] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "row var = date_format(\"a\", now())", + "query": "from a_index | sort cbrt(doubleField)", "error": [], "warning": [] }, { - "query": "row date_format(\"a\", now())", + "query": "from a_index | eval cbrt(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(stringField, dateField)", + "query": "row nullVar = null | eval cbrt(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, dateField)", + "query": "row var = ceil(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(to_string(stringField), to_datetime(stringField))", + "query": "row ceil(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, numberField)", - "error": [ - "Argument of [date_format] must be [date], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_format(stringField, dateField, extraArg)", - "error": [ - "Error: [date_format] function expects no more than 2 arguments, got 3." - ], + "query": "row var = ceil(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_format(stringField, dateField)", + "query": "row var = ceil(5)", "error": [], "warning": [] }, { - "query": "row var = date_format(true, true)", - "error": [ - "Argument of [date_format] must be [string], found value [true] type [boolean]", - "Argument of [date_format] must be [date], found value [true] type [boolean]" - ], + "query": "row ceil(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))", + "query": "row var = ceil(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(booleanField, booleanField)", + "query": "row var = ceil(true)", "error": [ - "Argument of [date_format] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_format] must be [date], found value [booleanField] type [boolean]" + "Argument of [ceil] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval date_format(null, null)", + "query": "from a_index | where ceil(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_format(nullVar, nullVar)", - "error": [], + "query": "from a_index | where ceil(booleanField) > 0", + "error": [ + "Argument of [ceil] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, \"2022\")", + "query": "from a_index | where ceil(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | where ceil(longField) > 0", + "error": [], "warning": [] }, { - "query": "row var = date_parse(\"a\", \"a\")", + "query": "from a_index | where ceil(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = date_parse(\"a\")", + "query": "from a_index | eval var = ceil(doubleField)", "error": [], "warning": [] }, { - "query": "row date_parse(\"a\", \"a\")", + "query": "from a_index | eval ceil(doubleField)", "error": [], "warning": [] }, { - "query": "row var = date_parse(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval var = ceil(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = date_parse(5, 5)", + "query": "from a_index | eval ceil(booleanField)", "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]" + "Argument of [ceil] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = date_parse(stringField)", - "error": [], + "query": "from a_index | eval var = ceil(*)", + "error": [ + "Using wildcards (*) in ceil is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval var = date_parse(stringField, stringField)", + "query": "from a_index | eval var = ceil(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(stringField, stringField)", + "query": "from a_index | eval ceil(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))", + "query": "from a_index | eval var = ceil(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(numberField, numberField)", - "error": [ - "Argument of [date_parse] must be [string], found value [numberField] type [number]", - "Argument of [date_parse] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = ceil(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(stringField, stringField, extraArg)", - "error": [ - "Error: [date_parse] function expects no more than 2 arguments, got 3." - ], + "query": "from a_index | eval ceil(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_parse(stringField, stringField)", + "query": "from a_index | eval var = ceil(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = date_parse(to_string(true), to_string(true))", + "query": "from a_index | eval ceil(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = date_parse(true, true)", + "query": "from a_index | eval ceil(doubleField, extraArg)", "error": [ - "Argument of [date_parse] must be [string], found value [true] type [boolean]", - "Argument of [date_parse] must be [string], found value [true] type [boolean]" + "Error: [ceil] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | sort ceil(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(booleanField, booleanField)", - "error": [ - "Argument of [date_parse] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_parse] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval ceil(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(null, null)", + "query": "row nullVar = null | eval ceil(nullVar)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_parse(nullVar, nullVar)", + "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", "error": [], "warning": [] }, { - "query": "row var = date_trunc(1 year, now())", + "query": "row cidr_match(to_ip(\"127.0.0.1\"), \"a\")", "error": [], "warning": [] }, { - "query": "row date_trunc(1 year, now())", + "query": "row var = cidr_match(to_ip(to_ip(\"127.0.0.1\")), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, dateField)", - "error": [], + "query": "row var = cidr_match(true, true)", + "error": [ + "Argument of [cidr_match] must be [ip], found value [true] type [boolean]", + "Argument of [cidr_match] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField)", + "query": "from a_index | eval var = cidr_match(ipField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, to_datetime(stringField))", + "query": "from a_index | eval cidr_match(ipField, keywordField)", "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 | eval var = cidr_match(to_ip(ipField), to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", + "query": "from a_index | eval cidr_match(booleanField, booleanField)", "error": [ - "Error: [date_trunc] function expects exactly 2 arguments, got 3." + "Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]", + "Argument of [cidr_match] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort date_trunc(1 year, dateField)", + "query": "from a_index | eval var = cidr_match(ipField, textField)", "error": [], "warning": [] }, { - "query": "row var = date_trunc(now(), now())", + "query": "from a_index | eval cidr_match(ipField, textField)", "error": [], "warning": [] }, { - "query": "row date_trunc(now(), now())", + "query": "from a_index | sort cidr_match(ipField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = date_trunc(true, true)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]", - "Argument of [date_trunc] must be [date], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_trunc(1 year, to_datetime(dateField))", + "query": "from a_index | eval cidr_match(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(booleanField, booleanField)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [booleanField] type [boolean]", - "Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]" - ], + "query": "row nullVar = null | eval cidr_match(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(dateField, dateField)", + "query": "row var = coalesce(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(dateField, dateField)", + "query": "row coalesce(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(to_datetime(dateField), to_datetime(dateField))", + "query": "row var = coalesce(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(null, null)", + "query": "row var = coalesce(true, true)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_trunc(nullVar, nullVar)", + "query": "row coalesce(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, \"2022\")", + "query": "row var = coalesce(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, concat(\"20\", \"22\"))", + "query": "row var = coalesce(cartesianPointField, cartesianPointField)", "error": [ - "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval date_trunc(\"2022\", \"2022\")", - "error": [], + "query": "row coalesce(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval date_trunc(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", + "query": "row var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [date_trunc] must be [time_literal], found value [concat(\"20\",\"22\")] type [string]", - "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "row var = e()", + "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row e()", + "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | where e() > 0", + "query": "row var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = coalesce(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = e()", + "query": "row coalesce(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval e()", + "query": "row var = coalesce(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval e(extraArg)", + "query": "row var = coalesce(geoPointField, geoPointField)", "error": [ - "Error: [e] function expects exactly 0 arguments, got 1." + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort e()", - "error": [], + "query": "row coalesce(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row nullVar = null | eval e()", - "error": [], + "query": "row var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = ends_with(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row ends_with(\"a\", \"a\")", + "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = ends_with(to_string(\"a\"), to_string(\"a\"))", + "query": "row coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = ends_with(5, 5)", + "query": "row var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", "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]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = ends_with(stringField, stringField)", + "query": "row var = coalesce(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(stringField, stringField)", + "query": "row coalesce(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))", + "query": "row var = coalesce(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(numberField, numberField)", - "error": [ - "Argument of [ends_with] must be [string], found value [numberField] type [number]", - "Argument of [ends_with] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(stringField, stringField, extraArg)", - "error": [ - "Error: [ends_with] function expects exactly 2 arguments, got 3." - ], + "query": "row var = coalesce(5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort ends_with(stringField, stringField)", + "query": "row coalesce(5, 5)", "error": [], "warning": [] }, { - "query": "row var = ends_with(to_string(true), to_string(true))", + "query": "row var = coalesce(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = ends_with(true, true)", - "error": [ - "Argument of [ends_with] must be [string], found value [true] type [boolean]", - "Argument of [ends_with] must be [string], found value [true] type [boolean]" - ], + "query": "row var = coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))", + "query": "row coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(booleanField, booleanField)", - "error": [ - "Argument of [ends_with] must be [string], found value [booleanField] type [boolean]", - "Argument of [ends_with] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(null, null)", + "query": "row var = coalesce(\"a\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ends_with(nullVar, nullVar)", + "query": "row coalesce(\"a\")", "error": [], "warning": [] }, { - "query": "row var = floor(5)", + "query": "row var = coalesce(to_string(true))", "error": [], "warning": [] }, { - "query": "row floor(5)", + "query": "row var = coalesce(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = floor(to_integer(\"a\"))", + "query": "row coalesce(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = floor(\"a\")", - "error": [ - "Argument of [floor] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = coalesce(to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where floor(numberField) > 0", + "query": "row var = coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | where floor(stringField) > 0", - "error": [ - "Argument of [floor] must be [number], found value [stringField] type [string]" - ], + "query": "row coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(numberField)", + "query": "row var = coalesce(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(numberField)", + "query": "row var = coalesce(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(to_integer(stringField))", + "query": "from a_index | where coalesce(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(stringField)", + "query": "from a_index | where coalesce(counterDoubleField) > 0", "error": [ - "Argument of [floor] must be [number], found value [stringField] type [string]" + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval floor(numberField, extraArg)", - "error": [ - "Error: [floor] function expects exactly one argument, got 2." - ], + "query": "from a_index | where coalesce(integerField, integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(*)", + "query": "from a_index | where coalesce(counterDoubleField, counterDoubleField) > 0", "error": [ - "Using wildcards (*) in floor is not allowed" + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | sort floor(numberField)", + "query": "from a_index | where coalesce(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = floor(to_integer(true))", + "query": "from a_index | where coalesce(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = floor(true)", - "error": [ - "Argument of [floor] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = coalesce(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | where floor(booleanField) > 0", - "error": [ - "Argument of [floor] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval coalesce(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(to_integer(booleanField))", + "query": "from a_index | eval var = coalesce(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(booleanField)", + "query": "from a_index | eval coalesce(counterDoubleField)", "error": [ - "Argument of [floor] must be [number], found value [booleanField] type [boolean]" + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval floor(null)", + "query": "from a_index | eval var = coalesce(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval floor(nullVar)", + "query": "from a_index | eval coalesce(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = greatest(\"a\")", + "query": "from a_index | eval var = coalesce(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row greatest(\"a\")", - "error": [], + "query": "from a_index | eval coalesce(counterDoubleField, counterDoubleField)", + "error": [ + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" + ], "warning": [] }, { - "query": "from a_index | eval var = greatest(stringField)", + "query": "from a_index | eval var = coalesce(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(stringField)", + "query": "from a_index | eval coalesce(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | sort greatest(stringField)", + "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(true)", + "query": "from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row greatest(true)", + "query": "from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_boolean(true))", + "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(true, true)", + "query": "from a_index | eval var = coalesce(dateField, dateField)", "error": [], "warning": [] }, { - "query": "row greatest(true, true)", + "query": "from a_index | eval coalesce(dateField, dateField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_boolean(true), to_boolean(true))", + "query": "from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = greatest(5, 5)", + "query": "from a_index | eval var = coalesce(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row greatest(5, 5)", + "query": "from a_index | eval coalesce(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_integer(true), to_integer(true))", + "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(5)", + "query": "from a_index | eval var = coalesce(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row greatest(5)", + "query": "from a_index | eval coalesce(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_integer(true))", + "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = coalesce(integerField)", "error": [], "warning": [] }, { - "query": "row greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval coalesce(integerField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = coalesce(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_string(true))", + "query": "from a_index | eval var = coalesce(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = greatest(\"a\", \"a\")", + "query": "from a_index | eval coalesce(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row greatest(\"a\", \"a\")", + "query": "from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_string(true), to_string(true))", + "query": "from a_index | eval var = coalesce(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval coalesce(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_version(\"a\"), to_version(\"a\"))", + "query": "from a_index | eval var = coalesce(keywordField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where greatest(numberField, numberField) > 0", + "query": "from a_index | eval coalesce(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where greatest(cartesianPointField, cartesianPointField) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where greatest(numberField) > 0", + "query": "from a_index | eval var = coalesce(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where greatest(cartesianPointField) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval coalesce(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(stringField)) > 0", + "query": "from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(cartesianPointField)) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(stringField, stringField)) > 0", + "query": "from a_index | eval coalesce(longField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(cartesianPointField, cartesianPointField)) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(booleanField)", + "query": "from a_index | eval coalesce(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(booleanField)", + "query": "from a_index | eval var = coalesce(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_boolean(booleanField))", + "query": "from a_index | eval coalesce(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(cartesianPointField)", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(booleanField, booleanField)", + "query": "from a_index | eval coalesce(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(booleanField, booleanField)", + "query": "from a_index | eval var = coalesce(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_boolean(booleanField), to_boolean(booleanField))", + "query": "from a_index | eval coalesce(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(cartesianPointField, cartesianPointField)", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(to_version(keywordField), to_version(keywordField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(numberField, numberField)", + "query": "from a_index | sort coalesce(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(numberField, numberField)", + "query": "from a_index | eval coalesce(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))", + "query": "row nullVar = null | eval coalesce(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(numberField)", + "query": "from a_index | eval coalesce(\"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(numberField)", + "query": "from a_index | eval coalesce(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_integer(booleanField))", + "query": "row var = concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(ipField, ipField)", + "query": "row concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(ipField, ipField)", + "query": "row var = concat(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))", - "error": [], + "query": "row var = concat(true, true)", + "error": [ + "Argument of [concat] must be [keyword], found value [true] type [boolean]", + "Argument of [concat] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_string(booleanField))", + "query": "from a_index | eval var = concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(stringField, stringField)", + "query": "from a_index | eval concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(stringField, stringField)", + "query": "from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))", - "error": [], + "query": "from a_index | eval concat(booleanField, booleanField)", + "error": [ + "Argument of [concat] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [concat] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = greatest(versionField, versionField)", + "query": "from a_index | eval var = concat(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(versionField, versionField)", + "query": "from a_index | eval concat(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_version(stringField), to_version(stringField))", + "query": "from a_index | eval var = concat(textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | sort greatest(booleanField)", + "query": "from a_index | eval concat(textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(null)", + "query": "from a_index | eval var = concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval greatest(nullVar)", + "query": "from a_index | eval concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = least(\"a\")", + "query": "from a_index | sort concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row least(\"a\")", + "query": "from a_index | eval concat(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(stringField)", + "query": "row nullVar = null | eval concat(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(stringField)", + "query": "row var = cos(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | sort least(stringField)", + "query": "row cos(5.5)", "error": [], "warning": [] }, { - "query": "row var = least(true)", + "query": "row var = cos(to_double(true))", "error": [], "warning": [] }, { - "query": "row least(true)", + "query": "row var = cos(5)", "error": [], "warning": [] }, { - "query": "row var = least(to_boolean(true))", + "query": "row cos(5)", "error": [], "warning": [] }, { - "query": "row var = least(true, true)", + "query": "row var = cos(to_integer(true))", "error": [], "warning": [] }, { - "query": "row least(true, true)", - "error": [], + "query": "row var = cos(true)", + "error": [ + "Argument of [cos] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = least(to_boolean(true), to_boolean(true))", + "query": "from a_index | where cos(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = least(5, 5)", - "error": [], + "query": "from a_index | where cos(booleanField) > 0", + "error": [ + "Argument of [cos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row least(5, 5)", + "query": "from a_index | where cos(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = least(to_integer(true), to_integer(true))", + "query": "from a_index | where cos(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = least(5)", + "query": "from a_index | where cos(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row least(5)", + "query": "from a_index | eval var = cos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = least(to_integer(true))", + "query": "from a_index | eval cos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = cos(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | eval cos(booleanField)", + "error": [ + "Argument of [cos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = least(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", - "error": [], + "query": "from a_index | eval var = cos(*)", + "error": [ + "Using wildcards (*) in cos is not allowed" + ], "warning": [] }, { - "query": "row var = least(to_string(true))", + "query": "from a_index | eval var = cos(integerField)", "error": [], "warning": [] }, { - "query": "row var = least(\"a\", \"a\")", + "query": "from a_index | eval cos(integerField)", "error": [], "warning": [] }, { - "query": "row least(\"a\", \"a\")", + "query": "from a_index | eval var = cos(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = least(to_string(true), to_string(true))", + "query": "from a_index | eval var = cos(longField)", "error": [], "warning": [] }, { - "query": "row var = least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval cos(longField)", "error": [], "warning": [] }, { - "query": "row least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = cos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = least(to_version(\"a\"), to_version(\"a\"))", + "query": "from a_index | eval cos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = least(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval cos(doubleField, extraArg)", "error": [ - "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Error: [cos] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where least(numberField, numberField) > 0", + "query": "from a_index | sort cos(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | where least(cartesianPointField, cartesianPointField) > 0", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval cos(null)", + "error": [], "warning": [] }, { - "query": "from a_index | where least(numberField) > 0", + "query": "row nullVar = null | eval cos(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | where least(cartesianPointField) > 0", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "row var = cosh(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row cosh(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = cosh(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = cosh(5)", + "error": [], + "warning": [] + }, + { + "query": "row cosh(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(least(stringField)) > 0", + "query": "row var = cosh(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | where length(least(cartesianPointField)) > 0", + "query": "row var = cosh(true)", "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [cosh] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(least(stringField, stringField)) > 0", + "query": "from a_index | where cosh(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(least(cartesianPointField, cartesianPointField)) > 0", + "query": "from a_index | where cosh(booleanField) > 0", "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [cosh] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = least(booleanField)", + "query": "from a_index | where cosh(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval least(booleanField)", + "query": "from a_index | where cosh(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_boolean(booleanField))", + "query": "from a_index | where cosh(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval least(cartesianPointField)", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = cosh(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(booleanField, booleanField)", + "query": "from a_index | eval cosh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(booleanField, booleanField)", + "query": "from a_index | eval var = cosh(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_boolean(booleanField), to_boolean(booleanField))", - "error": [], + "query": "from a_index | eval cosh(booleanField)", + "error": [ + "Argument of [cosh] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval least(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = cosh(*)", "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Using wildcards (*) in cosh is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = least(numberField, numberField)", + "query": "from a_index | eval var = cosh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(numberField, numberField)", + "query": "from a_index | eval cosh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = cosh(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(numberField)", + "query": "from a_index | eval var = cosh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(numberField)", + "query": "from a_index | eval cosh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_integer(booleanField))", + "query": "from a_index | eval var = cosh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(ipField, ipField)", + "query": "from a_index | eval cosh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(ipField, ipField)", - "error": [], + "query": "from a_index | eval cosh(doubleField, extraArg)", + "error": [ + "Error: [cosh] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval var = least(to_ip(ipField), to_ip(ipField))", + "query": "from a_index | sort cosh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_string(booleanField))", + "query": "from a_index | eval cosh(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(stringField, stringField)", + "query": "row nullVar = null | eval cosh(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(stringField, stringField)", + "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(versionField, versionField)", + "query": "from a_index | eval var = date_diff(\"year\", to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval least(versionField, versionField)", - "error": [], + "query": "from a_index | eval date_diff(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [date_diff] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]", + "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = least(to_version(stringField), to_version(stringField))", + "query": "from a_index | eval var = date_diff(textField, dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort least(booleanField)", + "query": "from a_index | eval date_diff(textField, dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(null)", + "query": "from a_index | eval var = date_diff(to_string(booleanField), to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval least(nullVar)", + "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 | sort date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "row var = left(\"a\", 5)", + "query": "from a_index | eval date_diff(null, null, null)", "error": [], "warning": [] }, { - "query": "row left(\"a\", 5)", + "query": "row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = left(to_string(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval date_diff(\"year\", \"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "row var = left(5, \"a\")", + "query": "from a_index | eval date_diff(\"year\", concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "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 [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | where length(left(stringField, numberField)) > 0", + "query": "from a_index | eval date_diff(textField, \"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | where length(left(numberField, stringField)) > 0", + "query": "from a_index | eval date_diff(textField, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "error": [ - "Argument of [left] must be [string], found value [numberField] type [number]", - "Argument of [left] must be [number], found value [stringField] type [string]" + "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = left(stringField, numberField)", + "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval left(stringField, numberField)", + "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = left(to_string(stringField), to_integer(stringField))", + "query": "row var = date_extract(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval left(numberField, stringField)", - "error": [ - "Argument of [left] must be [string], found value [numberField] type [number]", - "Argument of [left] must be [number], found value [stringField] type [string]" - ], + "query": "row date_extract(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval left(stringField, numberField, extraArg)", + "query": "row var = date_extract(true, true)", "error": [ - "Error: [left] function expects exactly 2 arguments, got 3." + "Argument of [date_extract] must be [keyword], found value [true] type [boolean]", + "Argument of [date_extract] must be [date], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort left(stringField, numberField)", + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "row var = left(to_string(true), to_integer(true))", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "row var = left(true, true)", - "error": [ - "Argument of [left] must be [string], found value [true] type [boolean]", - "Argument of [left] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(left(booleanField, booleanField)) > 0", + "query": "from a_index | eval date_extract(booleanField, booleanField)", "error": [ - "Argument of [left] must be [string], found value [booleanField] type [boolean]", - "Argument of [left] must be [number], found value [booleanField] type [boolean]" + "Argument of [date_extract] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_extract] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = date_extract(textField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval left(booleanField, booleanField)", - "error": [ - "Argument of [left] must be [string], found value [booleanField] type [boolean]", - "Argument of [left] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval date_extract(textField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval left(null, null)", + "query": "from a_index | eval var = date_extract(to_string(booleanField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval left(nullVar, nullVar)", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", + "error": [ + "Error: [date_extract] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "row var = length(\"a\")", + "query": "from a_index | eval date_extract(null, null)", "error": [], "warning": [] }, { - "query": "row length(\"a\")", + "query": "row nullVar = null | eval date_extract(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = length(to_string(\"a\"))", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", \"2022\")", "error": [], "warning": [] }, { - "query": "row var = length(5)", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", concat(\"20\", \"22\"))", "error": [ - "Argument of [length] must be [string], found value [5] type [number]" + "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | where length(stringField) > 0", + "query": "from a_index | eval date_extract(textField, \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | where length(numberField) > 0", + "query": "from a_index | eval date_extract(textField, concat(\"20\", \"22\"))", "error": [ - "Argument of [length] must be [string], found value [numberField] type [number]" + "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = length(stringField)", + "query": "row var = date_format(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval length(stringField)", + "query": "row date_format(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(to_string(stringField))", + "query": "row var = date_format(true, true)", + "error": [ + "Argument of [date_format] must be [keyword], found value [true] type [boolean]", + "Argument of [date_format] must be [date], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = date_format(keywordField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval length(numberField)", - "error": [ - "Argument of [length] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval date_format(keywordField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval length(stringField, extraArg)", - "error": [ - "Error: [length] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(*)", + "query": "from a_index | eval date_format(booleanField, booleanField)", "error": [ - "Using wildcards (*) in length is not allowed" + "Argument of [date_format] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_format] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort length(stringField)", + "query": "from a_index | eval var = date_format(textField, dateField)", "error": [], "warning": [] }, { - "query": "row var = length(to_string(true))", + "query": "from a_index | eval date_format(textField, dateField)", "error": [], "warning": [] }, { - "query": "row var = length(true)", + "query": "from a_index | eval date_format(keywordField, dateField, extraArg)", "error": [ - "Argument of [length] must be [string], found value [true] type [boolean]" + "Error: [date_format] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where length(booleanField) > 0", - "error": [ - "Argument of [length] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | sort date_format(keywordField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(to_string(booleanField))", + "query": "from a_index | eval date_format(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval length(booleanField)", - "error": [ - "Argument of [length] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row nullVar = null | eval date_format(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval length(null)", + "query": "from a_index | eval date_format(keywordField, \"2022\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval length(nullVar)", - "error": [], + "query": "from a_index | eval date_format(keywordField, concat(\"20\", \"22\"))", + "error": [ + "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], "warning": [] }, { - "query": "row var = log(5, 5)", + "query": "from a_index | eval date_format(textField, \"2022\")", "error": [], "warning": [] }, { - "query": "row log(5, 5)", - "error": [], + "query": "from a_index | eval date_format(textField, concat(\"20\", \"22\"))", + "error": [ + "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], "warning": [] }, { - "query": "row var = log(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = date_parse(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = log(\"a\", \"a\")", - "error": [ - "Argument of [log] must be [number], found value [\"a\"] type [string]", - "Argument of [log] must be [number], found value [\"a\"] type [string]" - ], + "query": "row date_parse(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where log(numberField, numberField) > 0", + "query": "row var = date_parse(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where log(stringField, stringField) > 0", + "query": "row var = date_parse(true, true)", "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" + "Argument of [date_parse] must be [keyword], found value [true] type [boolean]", + "Argument of [date_parse] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = log(numberField, numberField)", + "query": "from a_index | eval var = date_parse(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval log(numberField, numberField)", + "query": "from a_index | eval date_parse(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval log(stringField, stringField)", + "query": "from a_index | eval date_parse(booleanField, booleanField)", "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" + "Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]" ], "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 | eval var = date_parse(keywordField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort log(numberField, numberField)", + "query": "from a_index | eval date_parse(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row var = log(5)", + "query": "from a_index | eval var = date_parse(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row log(5)", + "query": "from a_index | eval date_parse(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = log(to_integer(true))", + "query": "from a_index | eval var = date_parse(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = log(to_integer(true), to_integer(true))", + "query": "from a_index | eval date_parse(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = log(true, true)", + "query": "from a_index | eval date_parse(keywordField, keywordField, extraArg)", "error": [ - "Argument of [log] must be [number], found value [true] type [boolean]", - "Argument of [log] must be [number], found value [true] type [boolean]" + "Error: [date_parse] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where log(numberField) > 0", + "query": "from a_index | sort date_parse(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where log(booleanField) > 0", - "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where log(booleanField, booleanField) > 0", - "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]", - "Argument of [log] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval date_parse(null, null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log(numberField)", + "query": "row nullVar = null | eval date_parse(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval log(numberField)", + "query": "row var = date_trunc(1 year, to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log(to_integer(booleanField))", + "query": "row date_trunc(1 year, to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval log(booleanField)", + "query": "row var = date_trunc(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]" + "Argument of [date_trunc] must be [time_literal], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = log(*)", + "query": "row date_trunc(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [ - "Using wildcards (*) in log is not allowed" + "Argument of [date_trunc] must be [time_literal], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(booleanField, booleanField)", + "query": "row var = date_trunc(true, true)", "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]", - "Argument of [log] must be [number], found value [booleanField] type [boolean]" + "Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]", + "Argument of [date_trunc] must be [date], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort log(numberField)", + "query": "from a_index | eval var = date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval log(null, null)", + "query": "from a_index | eval date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval log(nullVar, nullVar)", + "query": "from a_index | eval var = date_trunc(1 year, to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = log10(5)", - "error": [], + "query": "from a_index | eval date_trunc(booleanField, booleanField)", + "error": [ + "Argument of [date_trunc] must be [time_literal], found value [booleanField] type [boolean]", + "Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row log10(5)", - "error": [], + "query": "from a_index | eval var = date_trunc(textField, dateField)", + "error": [ + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" + ], "warning": [] }, { - "query": "row var = log10(to_integer(\"a\"))", - "error": [], + "query": "from a_index | eval date_trunc(textField, dateField)", + "error": [ + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" + ], "warning": [] }, { - "query": "row var = log10(\"a\")", + "query": "from a_index | eval var = date_trunc(textField, to_datetime(dateField))", "error": [ - "Argument of [log10] must be [number], found value [\"a\"] type [string]" + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | where log10(numberField) > 0", - "error": [], + "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", + "error": [ + "Error: [date_trunc] function expects exactly 2 arguments, got 3." + ], "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 | sort date_trunc(1 year, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(numberField)", + "query": "from a_index | eval date_trunc(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(numberField)", + "query": "row nullVar = null | eval date_trunc(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(to_integer(stringField))", + "query": "from a_index | eval date_trunc(1 year, \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(stringField)", + "query": "from a_index | eval date_trunc(1 year, concat(\"20\", \"22\"))", "error": [ - "Argument of [log10] must be [number], found value [stringField] type [string]" + "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval log10(numberField, extraArg)", + "query": "from a_index | eval date_trunc(textField, \"2022\")", "error": [ - "Error: [log10] function expects exactly one argument, got 2." + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = log10(*)", + "query": "from a_index | eval date_trunc(textField, concat(\"20\", \"22\"))", "error": [ - "Using wildcards (*) in log10 is not allowed" + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]", + "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | sort log10(numberField)", + "query": "row var = e()", "error": [], "warning": [] }, { - "query": "row var = log10(to_integer(true))", + "query": "row e()", "error": [], "warning": [] }, { - "query": "row var = log10(true)", - "error": [ - "Argument of [log10] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | where e() > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where log10(booleanField) > 0", - "error": [ - "Argument of [log10] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = e()", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(to_integer(booleanField))", + "query": "from a_index | eval e()", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(booleanField)", + "query": "from a_index | eval e(extraArg)", "error": [ - "Argument of [log10] must be [number], found value [booleanField] type [boolean]" + "Error: [e] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval log10(null)", + "query": "from a_index | sort e()", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval log10(nullVar)", + "query": "row nullVar = null | eval e()", "error": [], "warning": [] }, { - "query": "row var = ltrim(\"a\")", + "query": "row var = ends_with(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row ltrim(\"a\")", + "query": "row ends_with(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = ltrim(to_string(\"a\"))", + "query": "row var = ends_with(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = ltrim(5)", + "query": "row var = ends_with(true, true)", "error": [ - "Argument of [ltrim] must be [string], found value [5] type [number]" + "Argument of [ends_with] must be [keyword], found value [true] type [boolean]", + "Argument of [ends_with] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(ltrim(stringField)) > 0", + "query": "from a_index | eval var = ends_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(ltrim(numberField)) > 0", - "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(stringField)", + "query": "from a_index | eval ends_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField)", + "query": "from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ltrim(to_string(stringField))", - "error": [], + "query": "from a_index | eval ends_with(booleanField, booleanField)", + "error": [ + "Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval ltrim(numberField)", - "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = ends_with(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField, extraArg)", - "error": [ - "Error: [ltrim] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval ends_with(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ltrim(*)", + "query": "from a_index | eval ends_with(keywordField, keywordField, extraArg)", "error": [ - "Using wildcards (*) in ltrim is not allowed" + "Error: [ends_with] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort ltrim(stringField)", + "query": "from a_index | sort ends_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = ltrim(to_string(true))", + "query": "from a_index | eval ends_with(null, null)", "error": [], "warning": [] }, { - "query": "row var = ltrim(true)", - "error": [ - "Argument of [ltrim] must be [string], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(ltrim(booleanField)) > 0", - "error": [ - "Argument of [ltrim] must be [string], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(to_string(booleanField))", + "query": "row nullVar = null | eval ends_with(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(booleanField)", - "error": [ - "Argument of [ltrim] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row var = exp(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(null)", + "query": "row exp(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ltrim(nullVar)", + "query": "row var = exp(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_avg(5)", + "query": "row var = exp(5)", "error": [], "warning": [] }, { - "query": "row mv_avg(5)", + "query": "row exp(5)", "error": [], "warning": [] }, { - "query": "row var = mv_avg(to_integer(\"a\"))", + "query": "row var = exp(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_avg(\"a\")", + "query": "row var = exp(true)", "error": [ - "Argument of [mv_avg] must be [number], found value [\"a\"] type [string]" + "Argument of [exp] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_avg(numberField) > 0", + "query": "from a_index | where exp(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where mv_avg(stringField) > 0", + "query": "from a_index | where exp(booleanField) > 0", "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" + "Argument of [exp] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(numberField)", + "query": "from a_index | where exp(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(numberField)", + "query": "from a_index | where exp(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(to_integer(stringField))", + "query": "from a_index | where exp(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(stringField)", - "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "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 var = mv_avg(*)", - "error": [ - "Using wildcards (*) in mv_avg is not allowed" - ], + "query": "from a_index | eval var = exp(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_avg(numberField)", + "query": "from a_index | eval exp(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_avg(to_integer(true))", + "query": "from a_index | eval var = exp(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_avg(true)", + "query": "from a_index | eval exp(booleanField)", "error": [ - "Argument of [mv_avg] must be [number], found value [true] type [boolean]" + "Argument of [exp] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_avg(booleanField) > 0", + "query": "from a_index | eval var = exp(*)", "error": [ - "Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]" + "Using wildcards (*) in exp is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(to_integer(booleanField))", + "query": "from a_index | eval var = exp(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(booleanField)", - "error": [ - "Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval exp(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(null)", + "query": "from a_index | eval var = exp(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_avg(nullVar)", + "query": "from a_index | eval var = exp(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(\"a\", \"a\")", + "query": "from a_index | eval exp(longField)", "error": [], "warning": [] }, { - "query": "row mv_concat(\"a\", \"a\")", + "query": "from a_index | eval var = exp(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval exp(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(5, 5)", + "query": "from a_index | eval exp(doubleField, extraArg)", "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]" + "Error: [exp] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where length(mv_concat(stringField, stringField)) > 0", + "query": "from a_index | sort exp(doubleField)", "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]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_concat(stringField, stringField)", + "query": "from a_index | eval exp(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField)", + "query": "row nullVar = null | eval exp(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))", + "query": "row var = floor(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(numberField, numberField)", - "error": [ - "Argument of [mv_concat] must be [string], found value [numberField] type [number]", - "Argument of [mv_concat] must be [string], found value [numberField] type [number]" - ], + "query": "row floor(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField, extraArg)", - "error": [ - "Error: [mv_concat] function expects exactly 2 arguments, got 3." - ], + "query": "row var = floor(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_concat(stringField, stringField)", + "query": "row var = floor(5)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(to_string(true), to_string(true))", + "query": "row floor(5)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(true, true)", - "error": [ - "Argument of [mv_concat] must be [string], found value [true] type [boolean]", - "Argument of [mv_concat] must be [string], found value [true] type [boolean]" - ], + "query": "row var = floor(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_concat(booleanField, booleanField)) > 0", + "query": "row var = floor(true)", "error": [ - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]" + "Argument of [floor] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | where floor(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(booleanField, booleanField)", + "query": "from a_index | where floor(booleanField) > 0", "error": [ - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]" + "Argument of [floor] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval mv_concat(null, null)", + "query": "from a_index | where floor(integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_concat(nullVar, nullVar)", + "query": "from a_index | where floor(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_count(\"a\")", + "query": "from a_index | where floor(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_count(\"a\")", + "query": "from a_index | eval var = floor(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(stringField)", + "query": "from a_index | eval floor(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(stringField)", + "query": "from a_index | eval var = floor(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(*)", + "query": "from a_index | eval floor(booleanField)", "error": [ - "Using wildcards (*) in mv_count is not allowed" + "Argument of [floor] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_count(stringField)", - "error": [], + "query": "from a_index | eval var = floor(*)", + "error": [ + "Using wildcards (*) in floor is not allowed" + ], "warning": [] }, { - "query": "row var = mv_count(true)", + "query": "from a_index | eval var = floor(integerField)", "error": [], "warning": [] }, { - "query": "row mv_count(true)", + "query": "from a_index | eval floor(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_boolean(true))", + "query": "from a_index | eval var = floor(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = floor(longField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval floor(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = floor(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval floor(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval floor(doubleField, extraArg)", + "error": [ + "Error: [floor] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_count(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | sort floor(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(now())", + "query": "from a_index | eval floor(null)", "error": [], "warning": [] }, { - "query": "row mv_count(now())", + "query": "row nullVar = null | eval floor(nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_datetime(now()))", + "query": "row var = from_base64(\"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_count(5)", + "query": "row from_base64(\"a\")", "error": [], "warning": [] }, { - "query": "row mv_count(5)", + "query": "row var = from_base64(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_integer(true))", - "error": [], + "query": "row var = from_base64(true)", + "error": [ + "Argument of [from_base64] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_count(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = from_base64(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval from_base64(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = from_base64(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval from_base64(booleanField)", + "error": [ + "Argument of [from_base64] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row mv_count(to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval var = from_base64(*)", + "error": [ + "Using wildcards (*) in from_base64 is not allowed" + ], "warning": [] }, { - "query": "row var = mv_count(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = from_base64(textField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval from_base64(textField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | eval from_base64(keywordField, extraArg)", + "error": [ + "Error: [from_base64] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_count(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | sort from_base64(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_string(true))", + "query": "from a_index | eval from_base64(null)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_version(\"1.0.0\"))", + "query": "row nullVar = null | eval from_base64(nullVar)", "error": [], "warning": [] }, { - "query": "row mv_count(to_version(\"1.0.0\"))", + "query": "row var = greatest(true)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_version(\"a\"))", + "query": "row greatest(true)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(booleanField) > 0", + "query": "row var = greatest(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(cartesianPointField) > 0", + "query": "row var = greatest(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(cartesianShapeField) > 0", + "query": "row greatest(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(dateField) > 0", + "query": "row var = greatest(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(numberField) > 0", + "query": "row var = greatest(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(geoPointField) > 0", + "query": "row greatest(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(geoShapeField) > 0", + "query": "row var = greatest(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(ipField) > 0", + "query": "row var = greatest(5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(stringField) > 0", + "query": "row greatest(5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(versionField) > 0", + "query": "row var = greatest(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(booleanField)", + "query": "row var = greatest(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(booleanField)", + "query": "row greatest(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_boolean(booleanField))", + "query": "row var = greatest(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(cartesianPointField)", + "query": "row var = greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(cartesianPointField)", + "query": "row greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))", + "query": "row var = greatest(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(cartesianShapeField)", + "query": "row var = greatest(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(cartesianShapeField)", + "query": "row greatest(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))", + "query": "row var = greatest(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(dateField)", + "query": "row var = greatest(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(dateField)", + "query": "row greatest(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_datetime(dateField))", + "query": "row var = greatest(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(numberField)", + "query": "row var = greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(numberField)", + "query": "row greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_integer(booleanField))", + "query": "row var = greatest(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(geoPointField)", - "error": [], + "query": "row var = greatest(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval mv_count(geoPointField)", + "query": "from a_index | where greatest(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_geopoint(geoPointField))", + "query": "from a_index | where greatest(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(geoShapeField)", - "error": [], + "query": "from a_index | where greatest(cartesianPointField) > 0", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval mv_count(geoShapeField)", + "query": "from a_index | where greatest(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_geoshape(geoPointField))", + "query": "from a_index | where greatest(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(ipField)", + "query": "from a_index | where greatest(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(ipField)", + "query": "from a_index | eval var = greatest(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_ip(ipField))", + "query": "from a_index | eval greatest(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_string(booleanField))", + "query": "from a_index | eval var = greatest(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(versionField)", - "error": [], + "query": "from a_index | eval greatest(cartesianPointField)", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval mv_count(versionField)", + "query": "from a_index | eval var = greatest(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_version(stringField))", + "query": "from a_index | eval greatest(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(booleanField, extraArg)", - "error": [ - "Error: [mv_count] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_count(booleanField)", + "query": "from a_index | eval var = greatest(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(null)", - "error": [], + "query": "from a_index | eval greatest(cartesianPointField, cartesianPointField)", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row nullVar = null | eval mv_count(nullVar)", + "query": "from a_index | eval var = greatest(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(\"a\")", + "query": "from a_index | eval greatest(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(\"a\")", + "query": "from a_index | eval var = greatest(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(stringField)", + "query": "from a_index | eval var = greatest(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(stringField)", + "query": "from a_index | eval greatest(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(*)", - "error": [ - "Using wildcards (*) in mv_dedupe is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_dedupe(stringField)", + "query": "from a_index | eval var = greatest(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(true)", + "query": "from a_index | eval var = greatest(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(true)", + "query": "from a_index | eval greatest(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_boolean(true))", + "query": "from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(now())", + "query": "from a_index | eval var = greatest(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(now())", + "query": "from a_index | eval greatest(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_datetime(now()))", + "query": "from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(5)", + "query": "from a_index | eval var = greatest(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(5)", + "query": "from a_index | eval greatest(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_integer(true))", + "query": "from a_index | eval var = greatest(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = greatest(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval greatest(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_string(true))", + "query": "from a_index | eval var = greatest(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_version(\"1.0.0\"))", + "query": "from a_index | eval greatest(longField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = greatest(longField, longField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_version(\"a\"))", + "query": "from a_index | eval greatest(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_dedupe(numberField) > 0", + "query": "from a_index | eval var = greatest(textField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_dedupe(stringField)) > 0", + "query": "from a_index | eval greatest(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(booleanField)", + "query": "from a_index | eval var = greatest(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(booleanField)", + "query": "from a_index | eval greatest(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_boolean(booleanField))", + "query": "from a_index | eval var = greatest(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(dateField)", + "query": "from a_index | eval greatest(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(dateField)", + "query": "from a_index | eval var = greatest(to_version(keywordField), to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_datetime(dateField))", + "query": "from a_index | sort greatest(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(numberField)", + "query": "from a_index | eval greatest(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(numberField)", + "query": "row nullVar = null | eval greatest(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_integer(booleanField))", + "query": "row var = ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(ipField)", + "query": "row ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(ipField)", + "query": "row var = ip_prefix(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_ip(ipField))", - "error": [], + "query": "row var = ip_prefix(true, true, true)", + "error": [ + "Argument of [ip_prefix] must be [ip], found value [true] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [true] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_string(booleanField))", + "query": "from a_index | eval var = ip_prefix(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(versionField)", + "query": "from a_index | eval ip_prefix(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(versionField)", + "query": "from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_version(stringField))", - "error": [], + "query": "from a_index | eval ip_prefix(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(booleanField, extraArg)", + "query": "from a_index | eval ip_prefix(ipField, integerField, integerField, extraArg)", "error": [ - "Error: [mv_dedupe] function expects exactly one argument, got 2." + "Error: [ip_prefix] function expects exactly 3 arguments, got 4." ], "warning": [] }, { - "query": "from a_index | sort mv_dedupe(booleanField)", + "query": "from a_index | sort ip_prefix(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval ip_prefix(null, null, null)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = least(true)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row least(true)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = least(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geopoint(\"POINT (30 10)\"))", + "query": "row var = least(true, true)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_geopoint(\"POINT (30 10)\"))", + "query": "row least(true, true)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = least(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "query": "row var = least(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "query": "row least(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = least(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(cartesianPointField)", + "query": "row var = least(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))", + "query": "row least(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(cartesianShapeField)", + "query": "row var = least(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(cartesianShapeField)", + "query": "row var = least(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))", + "query": "row least(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(geoPointField)", + "query": "row var = least(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(geoPointField)", + "query": "row var = least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))", + "query": "row least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(geoShapeField)", + "query": "row var = least(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(geoShapeField)", + "query": "row var = least(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))", + "query": "row least(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(numberField, extraArg)", - "error": [ - "Error: [mv_dedupe] function expects exactly one argument, got 2." - ], + "query": "row var = least(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_dedupe(numberField)", + "query": "row var = least(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row least(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(cartesianPointField)", + "query": "row var = least(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(null)", + "query": "row var = least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_dedupe(nullVar)", + "query": "row least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = mv_first(\"a\")", + "query": "row var = least(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row mv_first(\"a\")", - "error": [], + "query": "row var = least(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_first(stringField)", + "query": "from a_index | where least(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(stringField)", + "query": "from a_index | where least(cartesianPointField, cartesianPointField) > 0", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where least(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(*)", + "query": "from a_index | where least(cartesianPointField) > 0", "error": [ - "Using wildcards (*) in mv_first is not allowed" + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort mv_first(stringField)", + "query": "from a_index | where least(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_first(true)", + "query": "from a_index | where least(longField) > 0", "error": [], "warning": [] }, { - "query": "row mv_first(true)", + "query": "from a_index | where least(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_boolean(true))", + "query": "from a_index | eval var = least(booleanField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval least(booleanField)", "error": [], "warning": [] }, { - "query": "row mv_first(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | eval least(cartesianPointField)", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row var = mv_first(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row mv_first(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval least(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = least(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(now())", - "error": [], + "query": "from a_index | eval least(cartesianPointField, cartesianPointField)", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row mv_first(now())", + "query": "from a_index | eval var = least(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_datetime(now()))", + "query": "from a_index | eval least(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(5)", + "query": "from a_index | eval var = least(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_first(5)", + "query": "from a_index | eval var = least(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_integer(true))", + "query": "from a_index | eval least(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_first(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval least(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_first(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval least(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = least(to_ip(ipField), to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row mv_first(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = least(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval least(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_string(true))", + "query": "from a_index | eval var = least(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = least(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row mv_first(to_version(\"1.0.0\"))", + "query": "from a_index | eval least(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_version(\"a\"))", + "query": "from a_index | eval var = least(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_first(numberField) > 0", + "query": "from a_index | eval var = least(longField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_first(stringField)) > 0", + "query": "from a_index | eval least(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(booleanField)", + "query": "from a_index | eval var = least(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(booleanField)", + "query": "from a_index | eval least(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_boolean(booleanField))", + "query": "from a_index | eval var = least(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(cartesianPointField)", + "query": "from a_index | eval least(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(cartesianPointField)", + "query": "from a_index | eval var = least(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval least(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(cartesianShapeField)", + "query": "from a_index | eval var = least(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(cartesianShapeField)", + "query": "from a_index | eval least(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = least(to_version(keywordField), to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(dateField)", + "query": "from a_index | sort least(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(dateField)", + "query": "from a_index | eval least(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_datetime(dateField))", + "query": "row nullVar = null | eval least(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(numberField)", + "query": "row var = left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(numberField)", + "query": "row left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_integer(booleanField))", + "query": "row var = left(to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(geoPointField)", - "error": [], + "query": "row var = left(true, true)", + "error": [ + "Argument of [left] must be [keyword], found value [true] type [boolean]", + "Argument of [left] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_first(geoPointField)", + "query": "from a_index | eval var = left(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_geopoint(geoPointField))", + "query": "from a_index | eval left(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(geoShapeField)", + "query": "from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(geoShapeField)", - "error": [], + "query": "from a_index | eval left(booleanField, booleanField)", + "error": [ + "Argument of [left] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [left] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_geoshape(geoPointField))", + "query": "from a_index | eval var = left(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(ipField)", + "query": "from a_index | eval left(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(ipField)", - "error": [], + "query": "from a_index | eval left(keywordField, integerField, extraArg)", + "error": [ + "Error: [left] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_ip(ipField))", + "query": "from a_index | sort left(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_string(booleanField))", + "query": "from a_index | eval left(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(versionField)", + "query": "row nullVar = null | eval left(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(versionField)", + "query": "row var = length(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_version(stringField))", + "query": "row length(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(booleanField, extraArg)", - "error": [ - "Error: [mv_first] function expects exactly one argument, got 2." + "query": "row var = length(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = length(true)", + "error": [ + "Argument of [length] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_first(booleanField)", + "query": "from a_index | eval var = length(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(null)", + "query": "from a_index | eval length(keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_first(nullVar)", + "query": "from a_index | eval var = length(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_last(\"a\")", - "error": [], + "query": "from a_index | eval length(booleanField)", + "error": [ + "Argument of [length] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row mv_last(\"a\")", - "error": [], + "query": "from a_index | eval var = length(*)", + "error": [ + "Using wildcards (*) in length is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_last(stringField)", + "query": "from a_index | eval var = length(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(stringField)", + "query": "from a_index | eval length(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(*)", + "query": "from a_index | eval length(keywordField, extraArg)", "error": [ - "Using wildcards (*) in mv_last is not allowed" + "Error: [length] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort mv_last(stringField)", + "query": "from a_index | sort length(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(true)", + "query": "from a_index | eval length(null)", "error": [], "warning": [] }, { - "query": "row mv_last(true)", + "query": "row nullVar = null | eval length(nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_boolean(true))", + "query": "row var = locate(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row locate(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row mv_last(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = locate(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = locate(\"a\", \"a\", 5)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row locate(\"a\", \"a\", 5)", "error": [], "warning": [] }, { - "query": "row mv_last(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = locate(to_string(true), to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "row var = locate(true, true, true)", + "error": [ + "Argument of [locate] must be [keyword], found value [true] type [boolean]", + "Argument of [locate] must be [keyword], found value [true] type [boolean]", + "Argument of [locate] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_last(now())", + "query": "from a_index | eval var = locate(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row mv_last(now())", + "query": "from a_index | eval locate(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_datetime(now()))", + "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_last(5)", - "error": [], + "query": "from a_index | eval locate(booleanField, booleanField)", + "error": [ + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row mv_last(5)", + "query": "from a_index | eval var = locate(keywordField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_integer(true))", + "query": "from a_index | eval locate(keywordField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_last(to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval locate(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [locate] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_last(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = locate(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval locate(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row mv_last(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = locate(keywordField, textField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval locate(keywordField, textField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = locate(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row mv_last(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval locate(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = locate(textField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_string(true))", + "query": "from a_index | eval locate(textField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = locate(textField, textField)", "error": [], "warning": [] }, { - "query": "row mv_last(to_version(\"1.0.0\"))", + "query": "from a_index | eval locate(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_version(\"a\"))", + "query": "from a_index | eval var = locate(textField, textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_last(numberField) > 0", + "query": "from a_index | eval locate(textField, textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_last(stringField)) > 0", - "error": [], + "query": "from a_index | eval locate(keywordField, keywordField, integerField, extraArg)", + "error": [ + "Error: [locate] function expects no more than 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | eval var = mv_last(booleanField)", + "query": "from a_index | sort locate(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(booleanField)", + "query": "from a_index | eval locate(null, null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_boolean(booleanField))", + "query": "row nullVar = null | eval locate(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(cartesianPointField)", + "query": "row var = log(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(cartesianPointField)", + "query": "row log(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))", + "query": "row var = log(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(cartesianShapeField)", + "query": "row var = log(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(cartesianShapeField)", + "query": "row log(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))", + "query": "row var = log(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(dateField)", + "query": "row var = log(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(dateField)", + "query": "row log(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_datetime(dateField))", + "query": "row var = log(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(numberField)", + "query": "row var = log(to_double(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(numberField)", + "query": "row var = log(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_integer(booleanField))", + "query": "row log(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(geoPointField)", + "query": "row var = log(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(geoPointField)", + "query": "row var = log(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_geopoint(geoPointField))", + "query": "row log(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(geoShapeField)", + "query": "row var = log(to_integer(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(geoShapeField)", + "query": "row var = log(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_geoshape(geoPointField))", + "query": "row log(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(ipField)", + "query": "row var = log(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(ipField)", + "query": "row var = log(to_integer(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_ip(ipField))", + "query": "row var = log(5, to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_string(booleanField))", + "query": "row var = log(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(versionField)", - "error": [], + "query": "row var = log(true, true)", + "error": [ + "Argument of [log] must be [double], found value [true] type [boolean]", + "Argument of [log] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_last(versionField)", + "query": "from a_index | where log(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_version(stringField))", + "query": "from a_index | where log(booleanField) > 0", + "error": [ + "Argument of [log] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where log(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(booleanField, extraArg)", + "query": "from a_index | where log(booleanField, booleanField) > 0", "error": [ - "Error: [mv_last] function expects exactly one argument, got 2." + "Argument of [log] must be [double], found value [booleanField] type [boolean]", + "Argument of [log] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_last(booleanField)", + "query": "from a_index | where log(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(null)", + "query": "from a_index | where log(doubleField, longField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_last(nullVar)", + "query": "from a_index | where log(doubleField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(\"a\")", + "query": "from a_index | where log(integerField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(\"a\")", + "query": "from a_index | where log(integerField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(stringField)", + "query": "from a_index | where log(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(stringField)", + "query": "from a_index | where log(integerField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(*)", - "error": [ - "Using wildcards (*) in mv_max is not allowed" - ], + "query": "from a_index | where log(integerField, unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_max(stringField)", + "query": "from a_index | where log(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(true)", + "query": "from a_index | where log(longField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(true)", + "query": "from a_index | where log(longField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_boolean(true))", + "query": "from a_index | where log(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(now())", + "query": "from a_index | where log(longField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(now())", + "query": "from a_index | where log(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_datetime(now()))", + "query": "from a_index | where log(unsignedLongField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(5)", + "query": "from a_index | where log(unsignedLongField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(5)", + "query": "from a_index | where log(unsignedLongField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_integer(true))", + "query": "from a_index | where log(unsignedLongField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = log(doubleField)", "error": [], "warning": [] }, { - "query": "row mv_max(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval log(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = log(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_string(true))", - "error": [], + "query": "from a_index | eval log(booleanField)", + "error": [ + "Argument of [log] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_max(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = log(*)", + "error": [ + "Using wildcards (*) in log is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = log(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row mv_max(to_version(\"1.0.0\"))", + "query": "from a_index | eval log(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_version(\"a\"))", + "query": "from a_index | eval var = log(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval log(booleanField, booleanField)", "error": [ - "Argument of [mv_max] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Argument of [log] must be [double], found value [booleanField] type [boolean]", + "Argument of [log] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_max(numberField) > 0", + "query": "from a_index | eval var = log(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_max(cartesianPointField) > 0", - "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(mv_max(stringField)) > 0", + "query": "from a_index | eval log(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_max(cartesianPointField)) > 0", - "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = log(to_double(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(booleanField)", + "query": "from a_index | eval var = log(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(booleanField)", + "query": "from a_index | eval log(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_boolean(booleanField))", + "query": "from a_index | eval var = log(to_double(booleanField), longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(cartesianPointField)", - "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = log(doubleField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(dateField)", + "query": "from a_index | eval log(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(dateField)", + "query": "from a_index | eval var = log(to_double(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_datetime(dateField))", + "query": "from a_index | eval var = log(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(numberField)", + "query": "from a_index | eval log(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(numberField)", + "query": "from a_index | eval var = log(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_integer(booleanField))", + "query": "from a_index | eval var = log(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(ipField)", + "query": "from a_index | eval log(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(ipField)", + "query": "from a_index | eval var = log(to_integer(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_ip(ipField))", + "query": "from a_index | eval var = log(integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_string(booleanField))", + "query": "from a_index | eval log(integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(versionField)", + "query": "from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(versionField)", + "query": "from a_index | eval var = log(integerField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_version(stringField))", + "query": "from a_index | eval log(integerField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(booleanField, extraArg)", - "error": [ - "Error: [mv_max] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = log(to_integer(booleanField), longField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_max(booleanField)", + "query": "from a_index | eval var = log(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(null)", + "query": "from a_index | eval log(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_max(nullVar)", + "query": "from a_index | eval var = log(to_integer(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(5)", + "query": "from a_index | eval var = log(longField)", "error": [], "warning": [] }, { - "query": "row mv_median(5)", + "query": "from a_index | eval log(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(to_integer(\"a\"))", + "query": "from a_index | eval var = log(longField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(\"a\")", - "error": [ - "Argument of [mv_median] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval log(longField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(numberField) > 0", + "query": "from a_index | eval var = log(longField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(stringField) > 0", - "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = log(longField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(numberField)", + "query": "from a_index | eval log(longField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(numberField)", + "query": "from a_index | eval var = log(longField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(to_integer(stringField))", + "query": "from a_index | eval var = log(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(stringField)", - "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval log(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(numberField, extraArg)", - "error": [ - "Error: [mv_median] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = log(longField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(*)", - "error": [ - "Using wildcards (*) in mv_median is not allowed" - ], + "query": "from a_index | eval log(longField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_median(numberField)", + "query": "from a_index | eval var = log(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(to_integer(true))", + "query": "from a_index | eval log(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(true)", - "error": [ - "Argument of [mv_median] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = log(unsignedLongField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(booleanField) > 0", - "error": [ - "Argument of [mv_median] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval log(unsignedLongField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(to_integer(booleanField))", + "query": "from a_index | eval var = log(unsignedLongField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(booleanField)", - "error": [ - "Argument of [mv_median] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = log(unsignedLongField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(null)", + "query": "from a_index | eval log(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_median(nullVar)", + "query": "from a_index | eval var = log(unsignedLongField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_min(\"a\")", + "query": "from a_index | eval var = log(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "row mv_min(\"a\")", + "query": "from a_index | eval log(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(stringField)", + "query": "from a_index | eval var = log(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(stringField)", + "query": "from a_index | eval log(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(*)", + "query": "from a_index | eval log(doubleField, doubleField, extraArg)", "error": [ - "Using wildcards (*) in mv_min is not allowed" + "Error: [log] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort mv_min(stringField)", + "query": "from a_index | sort log(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(true)", + "query": "from a_index | eval log(null, null)", "error": [], "warning": [] }, { - "query": "row mv_min(true)", + "query": "row nullVar = null | eval log(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_boolean(true))", + "query": "row var = log10(5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_min(now())", + "query": "row log10(5.5)", "error": [], "warning": [] }, { - "query": "row mv_min(now())", + "query": "row var = log10(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_datetime(now()))", + "query": "row var = log10(5)", "error": [], "warning": [] }, { - "query": "row var = mv_min(5)", + "query": "row log10(5)", "error": [], "warning": [] }, { - "query": "row mv_min(5)", + "query": "row var = log10(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_integer(true))", - "error": [], + "query": "row var = log10(true)", + "error": [ + "Argument of [log10] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_min(to_ip(\"127.0.0.1\"))", + "query": "from a_index | where log10(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row mv_min(to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | where log10(booleanField) > 0", + "error": [ + "Argument of [log10] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_min(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | where log10(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_string(true))", + "query": "from a_index | where log10(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_version(\"1.0.0\"))", + "query": "from a_index | where log10(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_min(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = log10(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_version(\"a\"))", + "query": "from a_index | eval log10(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [mv_min] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], + "query": "from a_index | eval var = log10(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_min(numberField) > 0", - "error": [], + "query": "from a_index | eval log10(booleanField)", + "error": [ + "Argument of [log10] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where mv_min(cartesianPointField) > 0", + "query": "from a_index | eval var = log10(*)", "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Using wildcards (*) in log10 is not allowed" ], "warning": [] }, { - "query": "from a_index | where length(mv_min(stringField)) > 0", + "query": "from a_index | eval var = log10(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_min(cartesianPointField)) > 0", - "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval log10(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(booleanField)", + "query": "from a_index | eval var = log10(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(booleanField)", + "query": "from a_index | eval var = log10(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_boolean(booleanField))", + "query": "from a_index | eval log10(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(cartesianPointField)", - "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = log10(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(dateField)", + "query": "from a_index | eval log10(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(dateField)", - "error": [], + "query": "from a_index | eval log10(doubleField, extraArg)", + "error": [ + "Error: [log10] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_datetime(dateField))", + "query": "from a_index | sort log10(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(numberField)", + "query": "from a_index | eval log10(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(numberField)", + "query": "row nullVar = null | eval log10(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_integer(booleanField))", + "query": "row var = ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(ipField)", + "query": "row ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(ipField)", + "query": "row var = ltrim(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_ip(ipField))", - "error": [], + "query": "row var = ltrim(true)", + "error": [ + "Argument of [ltrim] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_string(booleanField))", + "query": "from a_index | eval var = ltrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(versionField)", + "query": "from a_index | eval ltrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(versionField)", + "query": "from a_index | eval var = ltrim(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_version(stringField))", - "error": [], + "query": "from a_index | eval ltrim(booleanField)", + "error": [ + "Argument of [ltrim] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_min(booleanField, extraArg)", + "query": "from a_index | eval var = ltrim(*)", "error": [ - "Error: [mv_min] function expects exactly one argument, got 2." + "Using wildcards (*) in ltrim is not allowed" ], "warning": [] }, { - "query": "from a_index | sort mv_min(booleanField)", + "query": "from a_index | eval var = ltrim(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(null)", + "query": "from a_index | eval ltrim(textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_min(nullVar)", - "error": [], + "query": "from a_index | eval ltrim(keywordField, extraArg)", + "error": [ + "Error: [ltrim] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_slice(\"a\", 5, 5)", + "query": "from a_index | sort ltrim(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_slice(\"a\", 5, 5)", + "query": "from a_index | eval ltrim(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(stringField, numberField, numberField)", + "query": "row nullVar = null | eval ltrim(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(stringField, numberField, numberField)", + "query": "row var = mv_append(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_slice(stringField, numberField, numberField)", + "query": "row mv_append(true, true)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(true, 5, 5)", + "query": "row var = mv_append(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row mv_slice(true, 5, 5)", - "error": [], + "query": "row var = mv_append(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))", - "error": [], + "query": "row mv_append(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", - "error": [], + "query": "row var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", + "query": "row var = mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", - "error": [], + "query": "row var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", + "query": "row var = mv_append(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row mv_append(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(now(), 5, 5)", + "query": "row var = mv_append(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "row mv_slice(now(), 5, 5)", + "query": "row var = mv_append(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_datetime(now()), to_integer(true), to_integer(true))", + "query": "row mv_append(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(5, 5, 5)", + "query": "row var = mv_append(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "row mv_slice(5, 5, 5)", - "error": [], + "query": "row var = mv_append(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))", - "error": [], + "query": "row mv_append(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", + "query": "row var = mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", + "query": "row mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(5, 5)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", + "query": "row mv_append(5, 5)", "error": [], "warning": [] }, { - "query": "row mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", + "query": "row var = mv_append(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row var = mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "row mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "row var = mv_append(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", + "query": "row var = mv_append(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_string(true), to_integer(true), to_integer(true))", + "query": "row mv_append(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_version(\"1.0.0\"), 5, 5)", + "query": "row var = mv_append(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row mv_slice(to_version(\"1.0.0\"), 5, 5)", + "query": "row var = mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_version(\"a\"), to_integer(true), to_integer(true))", + "query": "row mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_version(\"1.0.0\"), true, true)", - "error": [ - "Argument of [mv_slice] must be [number], found value [true] type [boolean]", - "Argument of [mv_slice] must be [number], found value [true] type [boolean]" - ], + "query": "row var = mv_append(to_version(\"a\"), to_version(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_slice(numberField, numberField, numberField) > 0", + "query": "from a_index | where mv_append(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where mv_slice(numberField, booleanField, booleanField) > 0", + "query": "from a_index | where mv_append(counterDoubleField, counterDoubleField) > 0", "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | where length(mv_slice(stringField, numberField, numberField)) > 0", + "query": "from a_index | where mv_append(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_slice(stringField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | where mv_append(longField, longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(booleanField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(booleanField, numberField, numberField)", + "query": "from a_index | eval mv_append(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(booleanField, booleanField, booleanField)", + "query": "from a_index | eval mv_append(counterDoubleField, counterDoubleField)", "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(cartesianPointField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianPointField, numberField, numberField)", + "query": "from a_index | eval mv_append(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianPointField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(cartesianShapeField, numberField, numberField)", + "query": "from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianShapeField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianShapeField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_append(dateField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(dateField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(dateField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(dateField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(to_double(booleanField), to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(numberField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(numberField, numberField, numberField)", + "query": "from a_index | eval mv_append(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(numberField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(geoPointField, numberField, numberField)", + "query": "from a_index | eval mv_append(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoPointField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoPointField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_append(integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(geoShapeField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoShapeField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(ipField, ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(ipField, ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoShapeField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(ipField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(ipField, numberField, numberField)", + "query": "from a_index | eval mv_append(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(ipField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(stringField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(versionField, numberField, numberField)", + "query": "from a_index | eval mv_append(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(versionField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_version(stringField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(versionField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(to_version(keywordField), to_version(keywordField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(booleanField, numberField, numberField, extraArg)", + "query": "from a_index | eval mv_append(booleanField, booleanField, extraArg)", "error": [ - "Error: [mv_slice] function expects no more than 3 arguments, got 4." + "Error: [mv_append] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort mv_slice(booleanField, numberField, numberField)", + "query": "from a_index | sort mv_append(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(null, null, null)", + "query": "from a_index | eval mv_append(null, null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)", + "query": "row nullVar = null | eval mv_append(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_sort(\"a\", \"asc\")", + "query": "from a_index | eval mv_append(\"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "row mv_sort(\"a\", \"asc\")", + "query": "from a_index | eval mv_append(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(stringField, \"asc\")", + "query": "row var = mv_avg(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(stringField, \"asc\")", + "query": "row mv_avg(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_sort(stringField, \"asc\")", + "query": "row var = mv_avg(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_sort(true, \"asc\")", + "query": "row var = mv_avg(5)", "error": [], "warning": [] }, { - "query": "row mv_sort(true, \"asc\")", + "query": "row mv_avg(5)", "error": [], "warning": [] }, { - "query": "row var = mv_sort(now(), \"asc\")", + "query": "row var = mv_avg(to_integer(true))", "error": [], "warning": [] }, { - "query": "row mv_sort(now(), \"asc\")", - "error": [], + "query": "row var = mv_avg(true)", + "error": [ + "Argument of [mv_avg] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_sort(5, \"asc\")", + "query": "from a_index | where mv_avg(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row mv_sort(5, \"asc\")", - "error": [], + "query": "from a_index | where mv_avg(booleanField) > 0", + "error": [ + "Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", + "query": "from a_index | where mv_avg(integerField) > 0", "error": [], "warning": [] }, { - "query": "row mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", + "query": "from a_index | where mv_avg(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_sort(to_version(\"1.0.0\"), \"asc\")", + "query": "from a_index | where mv_avg(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_sort(to_version(\"1.0.0\"), \"asc\")", + "query": "from a_index | eval var = mv_avg(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_sort(to_cartesianpoint(\"POINT (30 10)\"), true)", - "error": [ - "Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [mv_sort] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_avg(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_sort(numberField, \"asc\") > 0", + "query": "from a_index | eval var = mv_avg(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_sort(cartesianPointField, booleanField) > 0", + "query": "from a_index | eval mv_avg(booleanField)", "error": [ - "Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]" + "Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(mv_sort(stringField, \"asc\")) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where length(mv_sort(cartesianPointField, booleanField)) > 0", + "query": "from a_index | eval var = mv_avg(*)", "error": [ - "Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]" + "Using wildcards (*) in mv_avg is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(booleanField, \"asc\")", + "query": "from a_index | eval var = mv_avg(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(booleanField, \"asc\")", + "query": "from a_index | eval mv_avg(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(dateField, \"asc\")", + "query": "from a_index | eval var = mv_avg(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(dateField, \"asc\")", + "query": "from a_index | eval var = mv_avg(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(numberField, \"asc\")", + "query": "from a_index | eval mv_avg(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(numberField, \"asc\")", + "query": "from a_index | eval var = mv_avg(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(ipField, \"asc\")", + "query": "from a_index | eval mv_avg(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(ipField, \"asc\")", - "error": [], + "query": "from a_index | eval mv_avg(doubleField, extraArg)", + "error": [ + "Error: [mv_avg] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(versionField, \"asc\")", + "query": "from a_index | sort mv_avg(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(versionField, \"asc\")", + "query": "from a_index | eval mv_avg(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(booleanField, \"asc\", extraArg)", - "error": [ - "Error: [mv_sort] function expects no more than 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_sort(booleanField, \"asc\")", + "query": "row nullVar = null | eval mv_avg(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(null, null)", + "query": "row var = mv_concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_sort(nullVar, nullVar)", + "query": "row mv_concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_sum(5)", + "query": "row var = mv_concat(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row mv_sum(5)", - "error": [], + "query": "row var = mv_concat(true, true)", + "error": [ + "Argument of [mv_concat] must be [keyword], found value [true] type [boolean]", + "Argument of [mv_concat] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_sum(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_sum(\"a\")", - "error": [ - "Argument of [mv_sum] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_concat(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_sum(numberField) > 0", + "query": "from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_sum(stringField) > 0", + "query": "from a_index | eval mv_concat(booleanField, booleanField)", "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" + "Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(numberField)", + "query": "from a_index | eval var = mv_concat(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(numberField)", + "query": "from a_index | eval mv_concat(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(to_integer(stringField))", + "query": "from a_index | eval var = mv_concat(textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(stringField)", - "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(numberField, extraArg)", - "error": [ - "Error: [mv_sum] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(*)", - "error": [ - "Using wildcards (*) in mv_sum is not allowed" - ], + "query": "from a_index | eval mv_concat(textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_sum(numberField)", + "query": "from a_index | eval var = mv_concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = mv_sum(to_integer(true))", + "query": "from a_index | eval mv_concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = mv_sum(true)", + "query": "from a_index | eval mv_concat(keywordField, keywordField, extraArg)", "error": [ - "Argument of [mv_sum] must be [number], found value [true] type [boolean]" + "Error: [mv_concat] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where mv_sum(booleanField) > 0", - "error": [ - "Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | sort mv_concat(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(to_integer(booleanField))", + "query": "from a_index | eval mv_concat(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(booleanField)", - "error": [ - "Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row nullVar = null | eval mv_concat(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(null)", + "query": "row var = mv_count(true)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_sum(nullVar)", + "query": "row mv_count(true)", "error": [], "warning": [] }, { - "query": "row var = mv_zip(\"a\", \"a\", \"a\")", + "query": "row var = mv_count(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = mv_zip(\"a\", \"a\")", - "error": [], + "query": "row var = mv_count(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row mv_zip(\"a\", \"a\", \"a\")", - "error": [], + "query": "row mv_count(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row mv_zip(\"a\", \"a\")", + "query": "row var = mv_count(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_count(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_zip(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", + "query": "row mv_count(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_zip(5, 5, 5)", + "query": "row var = mv_count(to_cartesianshape(cartesianPointField))", "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]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0", + "query": "row var = mv_count(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0", - "error": [ - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]" - ], + "query": "row mv_count(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(stringField, stringField, stringField)", + "query": "row var = mv_count(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField)", + "query": "row var = mv_count(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField)", + "query": "row mv_count(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "row var = mv_count(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(numberField, numberField, numberField)", + "query": "row var = mv_count(geoPointField)", "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]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)", + "query": "row mv_count(geoPointField)", "error": [ - "Error: [mv_zip] function expects no more than 3 arguments, got 4." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort mv_zip(stringField, stringField, stringField)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(to_string(true), to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(true, true, true)", + "query": "row var = mv_count(to_geopoint(geoPointField))", "error": [ - "Argument of [mv_zip] must be [string], found value [true] type [boolean]", - "Argument of [mv_zip] must be [string], found value [true] type [boolean]", - "Argument of [mv_zip] must be [string], found value [true] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where length(mv_zip(booleanField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_count(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))", + "query": "row mv_count(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(booleanField, booleanField, booleanField)", + "query": "row var = mv_count(to_geoshape(geoPointField))", "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval mv_zip(null, null, null)", + "query": "row var = mv_count(5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)", + "query": "row mv_count(5)", "error": [], "warning": [] }, { - "query": "row var = mv_zip(to_string(true), to_string(true))", + "query": "row var = mv_count(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_zip(stringField, stringField)) > 0", + "query": "row var = mv_count(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_zip(booleanField, booleanField)) > 0", - "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row mv_count(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(stringField, stringField)", + "query": "row var = mv_count(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))", + "query": "row var = mv_count(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(booleanField, booleanField)", - "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row mv_count(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_zip(stringField, stringField)", + "query": "row var = mv_count(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = now()", + "query": "row var = mv_count(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row now()", + "query": "row mv_count(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = now()", + "query": "row var = mv_count(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval now()", + "query": "from a_index | where mv_count(booleanField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval now(extraArg)", + "query": "from a_index | where mv_count(counterDoubleField) > 0", "error": [ - "Error: [now] function expects exactly 0 arguments, got 1." + "Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | sort now()", + "query": "from a_index | where mv_count(cartesianPointField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval now()", + "query": "from a_index | where mv_count(cartesianShapeField) > 0", "error": [], "warning": [] }, { - "query": "row var = pi()", + "query": "from a_index | where mv_count(dateField) > 0", "error": [], "warning": [] }, { - "query": "row pi()", + "query": "from a_index | where mv_count(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where pi() > 0", + "query": "from a_index | where mv_count(geoPointField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pi()", + "query": "from a_index | where mv_count(geoShapeField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval pi()", + "query": "from a_index | where mv_count(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval pi(extraArg)", - "error": [ - "Error: [pi] function expects exactly 0 arguments, got 1." - ], - "warning": [] - }, - { - "query": "from a_index | sort pi()", + "query": "from a_index | where mv_count(ipField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval pi()", + "query": "from a_index | where mv_count(keywordField) > 0", "error": [], "warning": [] }, { - "query": "row var = pow(5, 5)", + "query": "from a_index | where mv_count(longField) > 0", "error": [], "warning": [] }, { - "query": "row pow(5, 5)", + "query": "from a_index | where mv_count(textField) > 0", "error": [], "warning": [] }, { - "query": "row var = pow(to_integer(\"a\"), to_integer(\"a\"))", + "query": "from a_index | where mv_count(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = pow(\"a\", \"a\")", - "error": [ - "Argument of [pow] must be [number], found value [\"a\"] type [string]", - "Argument of [pow] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where pow(numberField, numberField) > 0", + "query": "from a_index | where mv_count(versionField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where pow(stringField, stringField) > 0", - "error": [ - "Argument of [pow] must be [number], found value [stringField] type [string]", - "Argument of [pow] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(numberField, numberField)", + "query": "from a_index | eval var = mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField)", + "query": "from a_index | eval mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval var = mv_count(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(stringField, stringField)", + "query": "from a_index | eval mv_count(counterDoubleField)", "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 [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField, extraArg)", + "query": "from a_index | eval var = mv_count(*)", "error": [ - "Error: [pow] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in mv_count is not allowed" ], "warning": [] }, { - "query": "from a_index | sort pow(numberField, numberField)", + "query": "from a_index | eval var = mv_count(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = pow(to_integer(true), to_integer(true))", + "query": "from a_index | eval mv_count(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = pow(true, true)", - "error": [ - "Argument of [pow] must be [number], found value [true] type [boolean]", - "Argument of [pow] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | where pow(booleanField, booleanField) > 0", - "error": [ - "Argument of [pow] must be [number], found value [booleanField] type [boolean]", - "Argument of [pow] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_count(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(booleanField, booleanField)", - "error": [ - "Argument of [pow] must be [number], found value [booleanField] type [boolean]", - "Argument of [pow] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval pow(null, null)", + "query": "from a_index | eval var = mv_count(dateField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval pow(nullVar, nullVar)", + "query": "from a_index | eval mv_count(dateField)", "error": [], "warning": [] }, { - "query": "row var = replace(\"a\", \"a\", \"a\")", + "query": "from a_index | eval var = mv_count(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row replace(\"a\", \"a\", \"a\")", + "query": "from a_index | eval var = mv_count(doubleField)", "error": [], "warning": [] }, { - "query": "row var = replace(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval mv_count(doubleField)", "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": "from a_index | eval var = mv_count(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(replace(stringField, stringField, stringField)) > 0", + "query": "from a_index | eval var = mv_count(geoPointField)", "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 mv_count(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = replace(stringField, stringField, stringField)", + "query": "from a_index | eval var = mv_count(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField)", + "query": "from a_index | eval var = mv_count(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "from a_index | eval mv_count(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(numberField, numberField, numberField)", - "error": [ - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = mv_count(to_geoshape(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField, extraArg)", - "error": [ - "Error: [replace] function expects exactly 3 arguments, got 4." - ], + "query": "from a_index | eval var = mv_count(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort replace(stringField, stringField, stringField)", + "query": "from a_index | eval mv_count(integerField)", "error": [], "warning": [] }, { - "query": "row var = replace(to_string(true), to_string(true), to_string(true))", + "query": "from a_index | eval var = mv_count(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = replace(true, true, true)", - "error": [ - "Argument of [replace] must be [string], found value [true] type [boolean]", - "Argument of [replace] must be [string], found value [true] type [boolean]", - "Argument of [replace] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(replace(booleanField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_count(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval var = mv_count(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval replace(null, null, null)", + "query": "from a_index | eval mv_count(keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval replace(nullVar, nullVar, nullVar)", + "query": "from a_index | eval var = mv_count(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = right(\"a\", 5)", + "query": "from a_index | eval var = mv_count(longField)", "error": [], "warning": [] }, { - "query": "row right(\"a\", 5)", + "query": "from a_index | eval mv_count(longField)", "error": [], "warning": [] }, { - "query": "row var = right(to_string(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval var = mv_count(textField)", "error": [], "warning": [] }, { - "query": "row var = right(5, \"a\")", - "error": [ - "Argument of [right] must be [string], found value [5] type [number]", - "Argument of [right] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_count(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(right(stringField, numberField)) > 0", + "query": "from a_index | eval var = mv_count(unsignedLongField)", "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 mv_count(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = right(stringField, numberField)", + "query": "from a_index | eval var = mv_count(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField)", + "query": "from a_index | eval mv_count(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = right(to_string(stringField), to_integer(stringField))", + "query": "from a_index | eval var = mv_count(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval right(numberField, stringField)", + "query": "from a_index | eval mv_count(booleanField, extraArg)", "error": [ - "Argument of [right] must be [string], found value [numberField] type [number]", - "Argument of [right] must be [number], found value [stringField] type [string]" + "Error: [mv_count] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField, extraArg)", - "error": [ - "Error: [right] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | sort mv_count(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort right(stringField, numberField)", + "query": "from a_index | eval mv_count(null)", "error": [], "warning": [] }, { - "query": "row var = right(to_string(true), to_integer(true))", + "query": "row nullVar = null | eval mv_count(nullVar)", "error": [], "warning": [] }, { - "query": "row var = right(true, true)", - "error": [ - "Argument of [right] must be [string], found value [true] type [boolean]", - "Argument of [right] must be [number], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(right(booleanField, booleanField)) > 0", - "error": [ - "Argument of [right] must be [string], found value [booleanField] type [boolean]", - "Argument of [right] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval right(booleanField, booleanField)", - "error": [ - "Argument of [right] must be [string], found value [booleanField] type [boolean]", - "Argument of [right] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval right(null, null)", + "query": "from a_index | eval mv_count(\"2022\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval right(nullVar, nullVar)", + "query": "from a_index | eval mv_count(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "row var = round(5, 5)", + "query": "row var = mv_dedupe(true)", "error": [], "warning": [] }, { - "query": "row round(5, 5)", + "query": "row mv_dedupe(true)", "error": [], "warning": [] }, { - "query": "row var = round(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = mv_dedupe(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = round(\"a\", \"a\")", + "query": "row var = mv_dedupe(cartesianPointField)", "error": [ - "Argument of [round] must be [number], found value [\"a\"] type [string]", - "Argument of [round] must be [number], found value [\"a\"] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where round(numberField, numberField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(stringField, stringField) > 0", + "query": "row mv_dedupe(cartesianPointField)", "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]", - "Argument of [round] must be [number], found value [stringField] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = round(numberField, numberField)", - "error": [], + "query": "row var = mv_dedupe(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval round(numberField, numberField)", + "query": "row var = mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(to_integer(stringField), to_integer(stringField))", + "query": "row mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(stringField, stringField)", + "query": "row var = mv_dedupe(to_cartesianshape(cartesianPointField))", "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]", - "Argument of [round] must be [number], found value [stringField] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval round(numberField, numberField, extraArg)", - "error": [ - "Error: [round] function expects no more than 2 arguments, got 3." - ], + "query": "row var = mv_dedupe(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort round(numberField, numberField)", + "query": "row mv_dedupe(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = round(5)", + "query": "row var = mv_dedupe(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "row round(5)", + "query": "row var = mv_dedupe(5.5)", "error": [], "warning": [] }, { - "query": "row var = round(to_integer(true))", + "query": "row mv_dedupe(5.5)", "error": [], "warning": [] }, { - "query": "row var = round(to_integer(true), to_integer(true))", + "query": "row var = mv_dedupe(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = round(true, true)", + "query": "row var = mv_dedupe(geoPointField)", "error": [ - "Argument of [round] must be [number], found value [true] type [boolean]", - "Argument of [round] must be [number], found value [true] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where round(numberField) > 0", - "error": [], + "query": "row mv_dedupe(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | where round(booleanField) > 0", + "query": "row var = mv_dedupe(to_geopoint(geoPointField))", "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where round(booleanField, booleanField) > 0", + "query": "row var = mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = mv_dedupe(to_geoshape(geoPointField))", "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]", - "Argument of [round] must be [number], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = round(numberField)", + "query": "row var = mv_dedupe(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval round(numberField)", + "query": "row mv_dedupe(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(to_integer(booleanField))", + "query": "row var = mv_dedupe(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(booleanField)", - "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_dedupe(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(*)", - "error": [ - "Using wildcards (*) in round is not allowed" - ], + "query": "row mv_dedupe(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))", + "query": "row var = mv_dedupe(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(booleanField, booleanField)", - "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]", - "Argument of [round] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_dedupe(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort round(numberField)", + "query": "row mv_dedupe(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval round(null, null)", + "query": "row var = mv_dedupe(to_string(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval round(nullVar, nullVar)", + "query": "row var = mv_dedupe(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = rtrim(\"a\")", + "query": "row mv_dedupe(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row rtrim(\"a\")", + "query": "row var = mv_dedupe(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = rtrim(to_string(\"a\"))", + "query": "from a_index | where mv_dedupe(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = rtrim(5)", + "query": "from a_index | where mv_dedupe(counterDoubleField) > 0", "error": [ - "Argument of [rtrim] must be [string], found value [5] type [number]" + "Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | where length(rtrim(stringField)) > 0", + "query": "from a_index | where mv_dedupe(integerField) > 0", "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 | where mv_dedupe(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(stringField)", + "query": "from a_index | eval var = mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField)", + "query": "from a_index | eval mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(to_string(stringField))", + "query": "from a_index | eval var = mv_dedupe(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(numberField)", + "query": "from a_index | eval mv_dedupe(counterDoubleField)", "error": [ - "Argument of [rtrim] must be [string], found value [numberField] type [number]" + "Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField, extraArg)", + "query": "from a_index | eval var = mv_dedupe(*)", "error": [ - "Error: [rtrim] function expects exactly one argument, got 2." + "Using wildcards (*) in mv_dedupe is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = rtrim(*)", - "error": [ - "Using wildcards (*) in rtrim is not allowed" - ], + "query": "from a_index | eval var = mv_dedupe(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort rtrim(stringField)", + "query": "from a_index | eval mv_dedupe(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = rtrim(to_string(true))", + "query": "from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = rtrim(true)", - "error": [ - "Argument of [rtrim] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(rtrim(booleanField)) > 0", - "error": [ - "Argument of [rtrim] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_dedupe(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(to_string(booleanField))", + "query": "from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(booleanField)", - "error": [ - "Argument of [rtrim] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(null)", + "query": "from a_index | eval mv_dedupe(dateField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval rtrim(nullVar)", + "query": "from a_index | eval var = mv_dedupe(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = signum(5)", + "query": "from a_index | eval var = mv_dedupe(doubleField)", "error": [], "warning": [] }, { - "query": "row signum(5)", + "query": "from a_index | eval mv_dedupe(doubleField)", "error": [], "warning": [] }, { - "query": "row var = signum(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_dedupe(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = signum(\"a\")", - "error": [ - "Argument of [signum] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = mv_dedupe(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | where signum(numberField) > 0", + "query": "from a_index | eval mv_dedupe(geoPointField)", "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 var = mv_dedupe(to_geopoint(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(numberField)", + "query": "from a_index | eval var = mv_dedupe(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(numberField)", + "query": "from a_index | eval mv_dedupe(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(to_integer(stringField))", + "query": "from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(stringField)", - "error": [ - "Argument of [signum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_dedupe(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval signum(numberField, extraArg)", - "error": [ - "Error: [signum] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_dedupe(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(*)", - "error": [ - "Using wildcards (*) in signum is not allowed" - ], + "query": "from a_index | eval var = mv_dedupe(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort signum(numberField)", + "query": "from a_index | eval var = mv_dedupe(ipField)", "error": [], "warning": [] }, { - "query": "row var = signum(to_integer(true))", + "query": "from a_index | eval mv_dedupe(ipField)", "error": [], "warning": [] }, { - "query": "row var = signum(true)", - "error": [ - "Argument of [signum] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | where signum(booleanField) > 0", - "error": [ - "Argument of [signum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(to_integer(booleanField))", + "query": "from a_index | eval mv_dedupe(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(booleanField)", - "error": [ - "Argument of [signum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval signum(null)", + "query": "from a_index | eval var = mv_dedupe(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval signum(nullVar)", + "query": "from a_index | eval mv_dedupe(longField)", "error": [], "warning": [] }, { - "query": "row var = sin(5)", + "query": "from a_index | eval var = mv_dedupe(textField)", "error": [], "warning": [] }, { - "query": "row sin(5)", + "query": "from a_index | eval mv_dedupe(textField)", "error": [], "warning": [] }, { - "query": "row var = sin(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_dedupe(versionField)", "error": [], "warning": [] }, { - "query": "row var = sin(\"a\")", - "error": [ - "Argument of [sin] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_dedupe(versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | where sin(numberField) > 0", + "query": "from a_index | eval var = mv_dedupe(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | where sin(stringField) > 0", + "query": "from a_index | eval mv_dedupe(booleanField, extraArg)", "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" + "Error: [mv_dedupe] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = sin(numberField)", + "query": "from a_index | sort mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(numberField)", + "query": "from a_index | eval mv_dedupe(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sin(to_integer(stringField))", + "query": "row nullVar = null | eval mv_dedupe(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(stringField)", - "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_dedupe(\"2022\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval sin(numberField, extraArg)", - "error": [ - "Error: [sin] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_dedupe(concat(\"20\", \"22\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sin(*)", - "error": [ - "Using wildcards (*) in sin is not allowed" - ], + "query": "row var = mv_first(true)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sin(numberField)", + "query": "row mv_first(true)", "error": [], "warning": [] }, { - "query": "row var = sin(to_integer(true))", + "query": "row var = mv_first(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = sin(true)", + "query": "row var = mv_first(cartesianPointField)", "error": [ - "Argument of [sin] must be [number], found value [true] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where sin(booleanField) > 0", + "query": "row mv_first(cartesianPointField)", "error": [ - "Argument of [sin] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = sin(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(booleanField)", + "query": "row var = mv_first(to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [sin] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval sin(null)", + "query": "row var = mv_first(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval sin(nullVar)", + "query": "row mv_first(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(5)", - "error": [], + "query": "row var = mv_first(to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row sinh(5)", + "query": "row var = mv_first(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(to_integer(\"a\"))", + "query": "row mv_first(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(\"a\")", - "error": [ - "Argument of [sinh] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where sinh(numberField) > 0", + "query": "row var = mv_first(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | where sinh(stringField) > 0", - "error": [ - "Argument of [sinh] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(numberField)", + "query": "row var = mv_first(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(numberField)", + "query": "row mv_first(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sinh(to_integer(stringField))", + "query": "row var = mv_first(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(stringField)", + "query": "row var = mv_first(geoPointField)", "error": [ - "Argument of [sinh] must be [number], found value [stringField] type [string]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval sinh(numberField, extraArg)", + "query": "row mv_first(geoPointField)", "error": [ - "Error: [sinh] function expects exactly one argument, got 2." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = sinh(*)", + "query": "row var = mv_first(to_geopoint(geoPointField))", "error": [ - "Using wildcards (*) in sinh is not allowed" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort sinh(numberField)", + "query": "row var = mv_first(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(to_integer(true))", + "query": "row mv_first(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(true)", + "query": "row var = mv_first(to_geoshape(geoPointField))", "error": [ - "Argument of [sinh] must be [number], found value [true] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where sinh(booleanField) > 0", - "error": [ - "Argument of [sinh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_first(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sinh(to_integer(booleanField))", + "query": "row mv_first(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(booleanField)", - "error": [ - "Argument of [sinh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_first(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(null)", + "query": "row var = mv_first(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval sinh(nullVar)", + "query": "row mv_first(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = split(\"a\", \"a\")", + "query": "row var = mv_first(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "row split(\"a\", \"a\")", + "query": "row var = mv_first(\"a\")", "error": [], "warning": [] }, { - "query": "row var = split(to_string(\"a\"), to_string(\"a\"))", + "query": "row mv_first(\"a\")", "error": [], "warning": [] }, { - "query": "row var = split(5, 5)", - "error": [ - "Argument of [split] must be [string], found value [5] type [number]", - "Argument of [split] must be [string], found value [5] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(split(stringField, stringField)) > 0", + "query": "row var = mv_first(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where length(split(numberField, numberField)) > 0", - "error": [ - "Argument of [split] must be [string], found value [numberField] type [number]", - "Argument of [split] must be [string], found value [numberField] type [number]" - ], + "query": "row var = mv_first(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(stringField, stringField)", + "query": "row mv_first(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField)", + "query": "row var = mv_first(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(to_string(stringField), to_string(stringField))", + "query": "from a_index | where mv_first(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval split(numberField, numberField)", + "query": "from a_index | where mv_first(counterDoubleField) > 0", "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 [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField, extraArg)", - "error": [ - "Error: [split] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_first(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort split(stringField, stringField)", + "query": "from a_index | where mv_first(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = split(to_string(true), to_string(true))", + "query": "from a_index | where mv_first(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = split(true, true)", - "error": [ - "Argument of [split] must be [string], found value [true] type [boolean]", - "Argument of [split] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_first(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(split(booleanField, booleanField)) > 0", - "error": [ - "Argument of [split] must be [string], found value [booleanField] type [boolean]", - "Argument of [split] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_first(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval var = mv_first(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval split(booleanField, booleanField)", + "query": "from a_index | eval mv_first(counterDoubleField)", "error": [ - "Argument of [split] must be [string], found value [booleanField] type [boolean]", - "Argument of [split] must be [string], found value [booleanField] type [boolean]" + "Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval split(null, null)", - "error": [], + "query": "from a_index | eval var = mv_first(*)", + "error": [ + "Using wildcards (*) in mv_first is not allowed" + ], "warning": [] }, { - "query": "row nullVar = null | eval split(nullVar, nullVar)", + "query": "from a_index | eval var = mv_first(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = sqrt(5)", + "query": "from a_index | eval mv_first(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row sqrt(5)", + "query": "from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = sqrt(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_first(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = sqrt(\"a\")", - "error": [ - "Argument of [sqrt] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where sqrt(numberField) > 0", + "query": "from a_index | eval mv_first(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | where sqrt(stringField) > 0", - "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(numberField)", + "query": "from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField)", + "query": "from a_index | eval var = mv_first(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(to_integer(stringField))", + "query": "from a_index | eval mv_first(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(stringField)", - "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_first(to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField, extraArg)", - "error": [ - "Error: [sqrt] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_first(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(*)", - "error": [ - "Using wildcards (*) in sqrt is not allowed" - ], + "query": "from a_index | eval mv_first(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sqrt(numberField)", + "query": "from a_index | eval var = mv_first(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = sqrt(to_integer(true))", + "query": "from a_index | eval var = mv_first(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = sqrt(true)", - "error": [ - "Argument of [sqrt] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_first(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | where sqrt(booleanField) > 0", - "error": [ - "Argument of [sqrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_first(to_geopoint(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(to_integer(booleanField))", + "query": "from a_index | eval var = mv_first(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(booleanField)", - "error": [ - "Argument of [sqrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_first(geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(null)", + "query": "from a_index | eval var = mv_first(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval sqrt(nullVar)", + "query": "from a_index | eval var = mv_first(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(integerField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_first(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", - "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_contains] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_first(ipField)", + "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(longField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval mv_first(longField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(textField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(textField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_first(versionField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(versionField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval mv_first(booleanField, extraArg)", + "error": [ + "Error: [mv_first] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | sort mv_first(booleanField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(null)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "row nullVar = null | eval mv_first(nullVar)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(\"2022\")", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", + "query": "row var = mv_last(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField)", + "query": "row mv_last(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row var = mv_last(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", + "query": "row var = mv_last(cartesianPointField)", "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField, extraArg)", + "query": "row mv_last(cartesianPointField)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", - "error": [], + "query": "row var = mv_last(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", + "query": "row var = mv_last(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)", + "query": "row mv_last(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)", + "query": "row var = mv_last(to_cartesianshape(cartesianPointField))", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", + "query": "row var = mv_last(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", + "query": "row mv_last(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))", + "query": "row var = mv_last(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_last(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", + "query": "row mv_last(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", + "query": "row var = mv_last(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)", + "query": "row var = mv_last(geoPointField)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", - "error": [], + "query": "row mv_last(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", + "query": "row var = mv_last(to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_last(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row mv_last(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", + "query": "row var = mv_last(to_geoshape(geoPointField))", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_last(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", + "query": "row mv_last(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row var = mv_last(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_last(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", + "query": "row mv_last(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", + "query": "row var = mv_last(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row var = mv_last(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_last(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_last(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_last(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_last(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_contains(geoPointField, geoPointField)", + "query": "row var = mv_last(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | where mv_last(counterDoubleField) > 0", + "error": [ + "Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]" + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_last(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval mv_last(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_last(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(true, true)", + "query": "from a_index | eval mv_last(counterDoubleField)", "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(booleanField, booleanField)", + "query": "from a_index | eval var = mv_last(*)", "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]" + "Using wildcards (*) in mv_last is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_last(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval mv_last(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_last(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval mv_last(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval var = mv_last(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_contains(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval mv_last(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(null, null)", + "query": "from a_index | eval var = mv_last(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_contains(nullVar, nullVar)", + "query": "from a_index | eval var = mv_last(doubleField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(doubleField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_last(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", - "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_disjoint] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_last(geoPointField)", + "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval mv_last(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(ipField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_last(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(keywordField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(longField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(longField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(textField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval mv_last(textField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", + "query": "from a_index | eval var = mv_last(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", + "query": "from a_index | eval mv_last(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))", + "query": "from a_index | eval var = mv_last(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "from a_index | eval mv_last(booleanField, extraArg)", "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]" + "Error: [mv_last] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | sort mv_last(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", + "query": "from a_index | eval mv_last(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", + "query": "row nullVar = null | eval mv_last(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | eval mv_last(\"2022\")", "error": [], "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 | eval mv_last(concat(\"20\", \"22\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", + "query": "row var = mv_max(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", + "query": "row mv_max(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))", + "query": "row var = mv_max(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", + "query": "row mv_max(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", + "query": "row var = mv_max(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", + "query": "row mv_max(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", + "query": "row var = mv_max(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row var = mv_max(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_max(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_max(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_max(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row mv_max(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", + "query": "row var = mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", + "query": "row mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row var = mv_max(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "row mv_max(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_max(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)", + "query": "row var = mv_max(to_cartesianpoint(\"POINT (30 10)\"))", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [mv_max] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort st_disjoint(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | where mv_max(cartesianPointField) > 0", + "error": [ + "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_max(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(true, true)", + "query": "from a_index | eval mv_max(cartesianPointField)", "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(booleanField, booleanField)", + "query": "from a_index | eval var = mv_max(*)", "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]" + "Using wildcards (*) in mv_max is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval mv_max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_max(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_max(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval mv_max(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_max(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval var = mv_max(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval mv_max(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(null, null)", + "query": "from a_index | eval var = mv_max(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_disjoint(nullVar, nullVar)", + "query": "from a_index | eval var = mv_max(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(ipField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_max(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(\"a\", \"a\")", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_intersects] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_max(keywordField)", + "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(longField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(longField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(textField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(textField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_max(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(versionField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(versionField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", - "error": [], + "query": "from a_index | eval mv_max(booleanField, extraArg)", + "error": [ + "Error: [mv_max] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | sort mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(null)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row nullVar = null | eval mv_max(nullVar)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(\"2022\")", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "row var = mv_median(5.5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row mv_median(5.5)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = mv_median(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", + "query": "row var = mv_median(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", + "query": "row mv_median(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row var = mv_median(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(stringField, stringField)", + "query": "row var = mv_median(true)", "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]" + "Argument of [mv_median] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_median(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", - "error": [], + "query": "from a_index | where mv_median(booleanField) > 0", + "error": [ + "Argument of [mv_median] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", + "query": "from a_index | where mv_median(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | where mv_median(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_median(unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", + "query": "from a_index | eval var = mv_median(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", + "query": "from a_index | eval mv_median(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))", + "query": "from a_index | eval var = mv_median(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)", + "query": "from a_index | eval mv_median(booleanField)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Argument of [mv_median] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)", + "query": "from a_index | eval var = mv_median(*)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in mv_median is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = mv_median(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval mv_median(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "from a_index | eval var = mv_median(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval var = mv_median(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval mv_median(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval var = mv_median(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "from a_index | eval mv_median(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)", + "query": "from a_index | eval mv_median(doubleField, extraArg)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Error: [mv_median] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", + "query": "from a_index | sort mv_median(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", + "query": "from a_index | eval mv_median(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row nullVar = null | eval mv_median(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_min(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "row mv_min(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_min(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_min(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_intersects(geoPointField, geoPointField)", + "query": "row mv_min(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(5.5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row mv_min(5.5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row mv_min(5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(true, true)", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "row mv_min(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = mv_min(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(booleanField, booleanField)", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_min(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row mv_min(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = mv_min(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row var = mv_min(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "row mv_min(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "row var = mv_min(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [], + "query": "row var = mv_min(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [mv_min] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | where mv_min(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | where mv_min(cartesianPointField) > 0", + "error": [ + "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where mv_min(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(null, null)", + "query": "from a_index | where mv_min(longField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_intersects(nullVar, nullVar)", + "query": "from a_index | where mv_min(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_min(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(\"a\", \"a\")", + "query": "from a_index | eval mv_min(cartesianPointField)", "error": [ - "Argument of [st_within] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_within] must be [cartesian_point], found value [\"a\"] type [string]" + "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval var = mv_min(*)", + "error": [ + "Using wildcards (*) in mv_min is not allowed" + ], "warning": [] }, { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(dateField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(dateField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(doubleField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval mv_min(doubleField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(integerField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_min(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(ipField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(keywordField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_min(longField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(longField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", + "query": "from a_index | eval mv_min(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoPointField)", + "query": "from a_index | eval var = mv_min(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))", + "query": "from a_index | eval mv_min(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", - "error": [ - "Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_min(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval mv_min(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_min(to_version(keywordField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoPointField, extraArg)", + "query": "from a_index | eval mv_min(booleanField, extraArg)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Error: [mv_min] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", + "query": "from a_index | sort mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoShapeField)", + "query": "from a_index | eval mv_min(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)", + "query": "row nullVar = null | eval mv_min(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval mv_min(\"2022\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", + "query": "from a_index | eval mv_min(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField)", + "query": "row var = mv_slice(true, 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row mv_slice(true, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))", + "query": "row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField, extraArg)", + "query": "row var = mv_slice(cartesianPointField, 5, 5)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", + "query": "row mv_slice(cartesianPointField, 5, 5)", + "error": [ + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(true), to_integer(true))", + "error": [ + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", + "query": "row mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)", + "query": "row var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(true), to_integer(true))", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", + "query": "row var = mv_slice(to_datetime(\"2021-01-01T00:00:00Z\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", + "query": "row mv_slice(to_datetime(\"2021-01-01T00:00:00Z\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row var = mv_slice(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_slice(5.5, 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", + "query": "row mv_slice(5.5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_slice(to_double(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)", - "error": [], + "query": "row var = mv_slice(geoPointField, 5, 5)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)", + "query": "row mv_slice(geoPointField, 5, 5)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", - "error": [], + "query": "row var = mv_slice(to_geopoint(geoPointField), to_integer(true), to_integer(true))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", + "query": "row var = mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)", + "query": "row var = mv_slice(to_geoshape(geoPointField), to_integer(true), to_integer(true))", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_slice(5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", + "query": "row mv_slice(5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_within(geoPointField, geoPointField)", + "query": "row mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row mv_slice(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(to_string(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(5, to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(to_version(\"1.0.0\"), 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row mv_slice(to_version(\"1.0.0\"), 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(to_version(\"a\"), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_within(true, true)", + "query": "row var = mv_slice(5.5, true, true)", "error": [ - "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [mv_slice] must be [integer], found value [true] type [boolean]", + "Argument of [mv_slice] must be [integer], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | where mv_slice(doubleField, integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(booleanField, booleanField)", + "query": "from a_index | where mv_slice(counterDoubleField, booleanField, booleanField) > 0", "error": [ - "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]" + "Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | where mv_slice(integerField, integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | where mv_slice(longField, integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_slice(booleanField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval mv_slice(booleanField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval mv_slice(counterDoubleField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_slice(cartesianPointField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval mv_slice(cartesianPointField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_within(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(null, null)", + "query": "from a_index | eval var = mv_slice(cartesianShapeField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_within(nullVar, nullVar)", + "query": "from a_index | eval mv_slice(cartesianShapeField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row st_x(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(dateField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(\"a\"))", + "query": "from a_index | eval mv_slice(dateField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(\"a\")", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(doubleField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_slice(doubleField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_slice(to_double(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(geoPointField)", + "query": "from a_index | eval var = mv_slice(geoPointField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField)", + "query": "from a_index | eval mv_slice(geoPointField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_geopoint(stringField))", + "query": "from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(stringField)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_slice(geoShapeField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField, extraArg)", - "error": [ - "Error: [st_x] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_slice(geoShapeField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(*)", - "error": [ - "Using wildcards (*) in st_x is not allowed" - ], + "query": "from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(cartesianPointField)", + "query": "from a_index | eval var = mv_slice(integerField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField)", + "query": "from a_index | eval mv_slice(integerField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_cartesianpoint(stringField))", + "query": "from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField, extraArg)", - "error": [ - "Error: [st_x] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_slice(ipField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_x(geoPointField)", + "query": "from a_index | eval mv_slice(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_slice(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(true)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_slice(keywordField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(booleanField)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_slice(longField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_geopoint(geoPointField))", + "query": "from a_index | eval mv_slice(longField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_x(cartesianPointField)", + "query": "from a_index | eval var = mv_slice(longField, to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(null)", + "query": "from a_index | eval var = mv_slice(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_x(nullVar)", + "query": "from a_index | eval mv_slice(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(versionField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row st_y(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_slice(versionField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_slice(to_version(keywordField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_y(\"a\")", + "query": "from a_index | eval mv_slice(booleanField, integerField, integerField, extraArg)", "error": [ - "Argument of [st_y] must be [cartesian_point], found value [\"a\"] type [string]" + "Error: [mv_slice] function expects no more than 3 arguments, got 4." ], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | sort mv_slice(booleanField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_slice(null, null, null)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(\"a\"))", + "query": "row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(geoPointField)", + "query": "from a_index | eval mv_slice(\"2022\", integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField)", + "query": "from a_index | eval mv_slice(concat(\"20\", \"22\"), integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_geopoint(stringField))", + "query": "row var = mv_sort(true, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(stringField)", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [stringField] type [string]" - ], + "query": "row mv_sort(true, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField, extraArg)", - "error": [ - "Error: [st_y] function expects exactly one argument, got 2." - ], + "query": "row var = mv_sort(to_datetime(\"2021-01-01T00:00:00Z\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(*)", - "error": [ - "Using wildcards (*) in st_y is not allowed" - ], + "query": "row mv_sort(to_datetime(\"2021-01-01T00:00:00Z\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(cartesianPointField)", + "query": "row var = mv_sort(5.5, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(cartesianPointField)", + "query": "row mv_sort(5.5, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_cartesianpoint(stringField))", + "query": "row var = mv_sort(5, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(cartesianPointField, extraArg)", - "error": [ - "Error: [st_y] function expects exactly one argument, got 2." - ], + "query": "row mv_sort(5, \"asc\")", + "error": [], + "warning": [] + }, + { + "query": "row var = mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_y(geoPointField)", + "query": "row mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", "error": [], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_sort(\"a\", \"asc\")", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row mv_sort(\"a\", \"asc\")", "error": [], "warning": [] }, { - "query": "row var = st_y(true)", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "row var = mv_sort(to_version(\"1.0.0\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))", + "query": "row mv_sort(to_version(\"1.0.0\"), \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(booleanField)", + "query": "row var = mv_sort(to_cartesianpoint(\"POINT (30 10)\"), true)", "error": [ - "Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]" + "Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [mv_sort] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_sort(booleanField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | sort st_y(cartesianPointField)", + "query": "from a_index | eval mv_sort(booleanField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(null)", + "query": "from a_index | eval var = mv_sort(dateField, \"asc\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_y(nullVar)", + "query": "from a_index | eval mv_sort(dateField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(\"a\", \"a\")", + "query": "from a_index | eval var = mv_sort(doubleField, \"asc\")", "error": [], "warning": [] }, { - "query": "row starts_with(\"a\", \"a\")", + "query": "from a_index | eval mv_sort(doubleField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval var = mv_sort(integerField, \"asc\")", "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]" - ], + "query": "from a_index | eval mv_sort(integerField, \"asc\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_sort(ipField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(stringField, stringField)", + "query": "from a_index | eval mv_sort(ipField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField)", + "query": "from a_index | eval var = mv_sort(keywordField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))", + "query": "from a_index | eval mv_sort(keywordField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(numberField, numberField)", - "error": [ - "Argument of [starts_with] must be [string], found value [numberField] type [number]", - "Argument of [starts_with] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = mv_sort(longField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField, extraArg)", - "error": [ - "Error: [starts_with] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval mv_sort(longField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort starts_with(stringField, stringField)", + "query": "from a_index | eval var = mv_sort(textField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(to_string(true), to_string(true))", + "query": "from a_index | eval mv_sort(textField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(true, true)", - "error": [ - "Argument of [starts_with] must be [string], found value [true] type [boolean]", - "Argument of [starts_with] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_sort(versionField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval mv_sort(versionField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(booleanField, booleanField)", + "query": "from a_index | eval mv_sort(booleanField, \"asc\", extraArg)", "error": [ - "Argument of [starts_with] must be [string], found value [booleanField] type [boolean]", - "Argument of [starts_with] must be [string], found value [booleanField] type [boolean]" + "Error: [mv_sort] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval starts_with(null, null)", + "query": "from a_index | sort mv_sort(booleanField, \"asc\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval starts_with(nullVar, nullVar)", + "query": "from a_index | eval mv_sort(null, null)", "error": [], "warning": [] }, { - "query": "row var = substring(\"a\", 5, 5)", + "query": "row nullVar = null | eval mv_sort(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = substring(\"a\", 5)", + "query": "from a_index | eval mv_sort(\"2022\", \"asc\")", "error": [], "warning": [] }, { - "query": "row substring(\"a\", 5, 5)", + "query": "from a_index | eval mv_sort(concat(\"20\", \"22\"), \"asc\")", "error": [], "warning": [] }, { - "query": "row substring(\"a\", 5)", + "query": "row var = mv_sum(5.5)", "error": [], "warning": [] }, { - "query": "row var = substring(to_string(\"a\"), to_integer(\"a\"), to_integer(\"a\"))", + "query": "row mv_sum(5.5)", "error": [], "warning": [] }, { - "query": "row var = substring(5, \"a\", \"a\")", - "error": [ - "Argument of [substring] must be [string], found value [5] type [number]", - "Argument of [substring] must be [number], found value [\"a\"] type [string]", - "Argument of [substring] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = mv_sum(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(stringField, numberField, numberField)) > 0", + "query": "row var = mv_sum(5)", "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(numberField, stringField, stringField)) > 0", - "error": [ - "Argument of [substring] must be [string], found value [numberField] type [number]", - "Argument of [substring] must be [number], found value [stringField] type [string]", - "Argument of [substring] must be [number], found value [stringField] type [string]" - ], + "query": "row mv_sum(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(stringField, numberField, numberField)", + "query": "row var = mv_sum(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(stringField, numberField, numberField)", - "error": [], + "query": "row var = mv_sum(true)", + "error": [ + "Argument of [mv_sum] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))", + "query": "from a_index | where mv_sum(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(numberField, stringField, stringField)", + "query": "from a_index | where mv_sum(booleanField) > 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]" + "Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval substring(stringField, numberField, numberField, extraArg)", - "error": [ - "Error: [substring] function expects no more than 3 arguments, got 4." - ], + "query": "from a_index | where mv_sum(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort substring(stringField, numberField, numberField)", + "query": "from a_index | where mv_sum(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort substring(stringField, numberField)", + "query": "from a_index | where mv_sum(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = substring(to_string(true), to_integer(true), to_integer(true))", + "query": "from a_index | eval var = mv_sum(doubleField)", "error": [], "warning": [] }, { - "query": "row var = substring(true, true, true)", - "error": [ - "Argument of [substring] must be [string], found value [true] type [boolean]", - "Argument of [substring] must be [number], found value [true] type [boolean]", - "Argument of [substring] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_sum(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(booleanField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [substring] must be [string], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_sum(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", - "error": [], + "query": "from a_index | eval mv_sum(booleanField)", + "error": [ + "Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval substring(booleanField, booleanField, booleanField)", + "query": "from a_index | eval var = mv_sum(*)", "error": [ - "Argument of [substring] must be [string], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]" + "Using wildcards (*) in mv_sum is not allowed" ], "warning": [] }, { - "query": "from a_index | eval substring(null, null, null)", + "query": "from a_index | eval var = mv_sum(integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval substring(nullVar, nullVar, nullVar)", + "query": "from a_index | eval mv_sum(integerField)", "error": [], "warning": [] }, { - "query": "row var = tan(5)", + "query": "from a_index | eval var = mv_sum(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row tan(5)", + "query": "from a_index | eval var = mv_sum(longField)", "error": [], "warning": [] }, { - "query": "row var = tan(to_integer(\"a\"))", + "query": "from a_index | eval mv_sum(longField)", "error": [], "warning": [] }, { - "query": "row var = tan(\"a\")", - "error": [ - "Argument of [tan] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = mv_sum(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where tan(numberField) > 0", + "query": "from a_index | eval mv_sum(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where tan(stringField) > 0", + "query": "from a_index | eval mv_sum(doubleField, extraArg)", "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" + "Error: [mv_sum] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = tan(numberField)", + "query": "from a_index | sort mv_sum(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField)", + "query": "from a_index | eval mv_sum(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(to_integer(stringField))", + "query": "row nullVar = null | eval mv_sum(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(stringField)", - "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_zip(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField, extraArg)", - "error": [ - "Error: [tan] function expects exactly one argument, got 2." - ], + "query": "row mv_zip(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(*)", - "error": [ - "Using wildcards (*) in tan is not allowed" - ], + "query": "row var = mv_zip(to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort tan(numberField)", + "query": "row var = mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = tan(to_integer(true))", + "query": "row mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = tan(true)", - "error": [ - "Argument of [tan] must be [number], found value [true] type [boolean]" - ], + "query": "row var = mv_zip(to_string(true), to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where tan(booleanField) > 0", + "query": "row var = mv_zip(true, true, true)", "error": [ - "Argument of [tan] must be [number], found value [booleanField] type [boolean]" + "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = tan(to_integer(booleanField))", + "query": "from a_index | eval var = mv_zip(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(booleanField)", - "error": [ - "Argument of [tan] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_zip(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval tan(null)", + "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval tan(nullVar)", - "error": [], + "query": "from a_index | eval mv_zip(booleanField, booleanField)", + "error": [ + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = tanh(5)", + "query": "from a_index | eval var = mv_zip(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row tanh(5)", + "query": "from a_index | eval mv_zip(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = tanh(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = tanh(\"a\")", + "query": "from a_index | eval mv_zip(booleanField, booleanField, booleanField)", "error": [ - "Argument of [tanh] must be [number], found value [\"a\"] type [string]" + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where tanh(numberField) > 0", + "query": "from a_index | eval var = mv_zip(keywordField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | where tanh(stringField) > 0", - "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(numberField)", + "query": "from a_index | eval mv_zip(keywordField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(numberField)", + "query": "from a_index | eval var = mv_zip(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(to_integer(stringField))", + "query": "from a_index | eval mv_zip(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(stringField)", - "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_zip(keywordField, textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(numberField, extraArg)", - "error": [ - "Error: [tanh] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_zip(keywordField, textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(*)", - "error": [ - "Using wildcards (*) in tanh is not allowed" - ], + "query": "from a_index | eval var = mv_zip(keywordField, textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort tanh(numberField)", + "query": "from a_index | eval mv_zip(keywordField, textField, textField)", "error": [], "warning": [] }, { - "query": "row var = tanh(to_integer(true))", + "query": "from a_index | eval var = mv_zip(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = tanh(true)", - "error": [ - "Argument of [tanh] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_zip(textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where tanh(booleanField) > 0", - "error": [ - "Argument of [tanh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_zip(textField, keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(to_integer(booleanField))", + "query": "from a_index | eval mv_zip(textField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(booleanField)", - "error": [ - "Argument of [tanh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_zip(textField, keywordField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(null)", + "query": "from a_index | eval mv_zip(textField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval tanh(nullVar)", + "query": "from a_index | eval var = mv_zip(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = tau()", + "query": "from a_index | eval mv_zip(textField, textField)", "error": [], "warning": [] }, { - "query": "row tau()", + "query": "from a_index | eval var = mv_zip(textField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where tau() > 0", + "query": "from a_index | eval mv_zip(textField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tau()", + "query": "from a_index | eval var = mv_zip(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tau()", + "query": "from a_index | eval mv_zip(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tau(extraArg)", + "query": "from a_index | eval mv_zip(keywordField, keywordField, keywordField, extraArg)", "error": [ - "Error: [tau] function expects exactly 0 arguments, got 1." + "Error: [mv_zip] function expects no more than 3 arguments, got 4." ], "warning": [] }, { - "query": "from a_index | sort tau()", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval tau()", + "query": "from a_index | sort mv_zip(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_boolean(\"a\")", + "query": "from a_index | eval mv_zip(null, null, null)", "error": [], "warning": [] }, { - "query": "row to_boolean(\"a\")", + "query": "row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_bool(\"a\")", + "query": "row var = now()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(stringField)", + "query": "row now()", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(stringField)", + "query": "from a_index | eval var = now()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_bool(stringField)", + "query": "from a_index | eval now()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(*)", + "query": "from a_index | eval now(extraArg)", "error": [ - "Using wildcards (*) in to_boolean is not allowed" + "Error: [now] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | sort to_boolean(stringField)", + "query": "from a_index | sort now()", "error": [], "warning": [] }, { - "query": "row var = to_boolean(true)", + "query": "row nullVar = null | eval now()", "error": [], "warning": [] }, { - "query": "row to_boolean(true)", + "query": "row var = pi()", "error": [], "warning": [] }, { - "query": "row var = to_bool(true)", + "query": "row pi()", "error": [], "warning": [] }, { - "query": "row var = to_boolean(to_boolean(true))", + "query": "from a_index | where pi() > 0", "error": [], "warning": [] }, { - "query": "row var = to_boolean(5)", + "query": "from a_index | eval var = pi()", "error": [], "warning": [] }, { - "query": "row to_boolean(5)", + "query": "from a_index | eval pi()", "error": [], "warning": [] }, { - "query": "row var = to_bool(5)", - "error": [], + "query": "from a_index | eval pi(extraArg)", + "error": [ + "Error: [pi] function expects exactly 0 arguments, got 1." + ], "warning": [] }, { - "query": "row var = to_boolean(to_integer(true))", + "query": "from a_index | sort pi()", "error": [], "warning": [] }, { - "query": "row var = to_boolean(to_string(true))", + "query": "row nullVar = null | eval pi()", "error": [], "warning": [] }, { - "query": "row var = to_boolean(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(booleanField)", + "query": "row var = pow(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(booleanField)", + "query": "row pow(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_bool(booleanField)", + "query": "row var = pow(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(to_boolean(booleanField))", + "query": "row var = pow(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(cartesianPointField)", - "error": [ - "Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "row pow(5.5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(numberField)", + "query": "row var = pow(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(numberField)", + "query": "row var = pow(to_double(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_bool(numberField)", + "query": "row var = pow(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(to_integer(booleanField))", + "query": "row pow(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(to_string(booleanField))", + "query": "row var = pow(to_integer(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(booleanField, extraArg)", - "error": [ - "Error: [to_boolean] function expects exactly one argument, got 2." - ], + "query": "row var = pow(5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_boolean(booleanField)", + "query": "row pow(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(null)", + "query": "row var = pow(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_boolean(nullVar)", + "query": "row var = pow(to_integer(true), 5)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(\"a\")", + "query": "row var = pow(5, to_double(true))", "error": [], "warning": [] }, { - "query": "row to_cartesianpoint(\"a\")", + "query": "row var = pow(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(stringField)", - "error": [], + "query": "row var = pow(true, true)", + "error": [ + "Argument of [pow] must be [double], found value [true] type [boolean]", + "Argument of [pow] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(stringField)", + "query": "from a_index | where pow(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(*)", + "query": "from a_index | where pow(booleanField, booleanField) > 0", "error": [ - "Using wildcards (*) in to_cartesianpoint is not allowed" + "Argument of [pow] must be [double], found value [booleanField] type [boolean]", + "Argument of [pow] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_cartesianpoint(stringField)", + "query": "from a_index | where pow(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | where pow(doubleField, longField) > 0", "error": [], "warning": [] }, { - "query": "row to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | where pow(doubleField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where pow(integerField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(to_string(true))", + "query": "from a_index | where pow(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(true)", - "error": [ - "Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(cartesianPointField)", + "query": "from a_index | where pow(integerField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(cartesianPointField)", + "query": "from a_index | where pow(integerField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | where pow(longField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(booleanField)", - "error": [ - "Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "from a_index | where pow(longField, integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(to_string(booleanField))", + "query": "from a_index | where pow(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)", - "error": [ - "Error: [to_cartesianpoint] function expects exactly one argument, got 2." - ], + "query": "from a_index | where pow(longField, unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_cartesianpoint(cartesianPointField)", + "query": "from a_index | where pow(unsignedLongField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(null)", + "query": "from a_index | where pow(unsignedLongField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_cartesianpoint(nullVar)", + "query": "from a_index | where pow(unsignedLongField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(\"a\")", + "query": "from a_index | where pow(unsignedLongField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row to_cartesianshape(\"a\")", + "query": "from a_index | eval var = pow(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(stringField)", + "query": "from a_index | eval pow(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(stringField)", + "query": "from a_index | eval var = pow(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(*)", + "query": "from a_index | eval pow(booleanField, booleanField)", "error": [ - "Using wildcards (*) in to_cartesianshape is not allowed" + "Argument of [pow] must be [double], found value [booleanField] type [boolean]", + "Argument of [pow] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_cartesianshape(stringField)", + "query": "from a_index | eval var = pow(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval pow(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "row to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = pow(to_double(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = pow(doubleField, longField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval pow(doubleField, longField)", "error": [], "warning": [] }, { - "query": "row to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = pow(to_double(booleanField), longField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = pow(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_string(true))", + "query": "from a_index | eval pow(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(true)", - "error": [ - "Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = pow(to_double(booleanField), unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(cartesianPointField)", + "query": "from a_index | eval var = pow(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(cartesianPointField)", + "query": "from a_index | eval pow(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval var = pow(to_integer(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(booleanField)", - "error": [ - "Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = pow(integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(cartesianShapeField)", + "query": "from a_index | eval pow(integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(cartesianShapeField)", + "query": "from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = pow(integerField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(to_string(booleanField))", + "query": "from a_index | eval pow(integerField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(cartesianPointField, extraArg)", - "error": [ - "Error: [to_cartesianshape] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_cartesianshape(cartesianPointField)", + "query": "from a_index | eval var = pow(to_integer(booleanField), longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(null)", + "query": "from a_index | eval var = pow(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_cartesianshape(nullVar)", + "query": "from a_index | eval pow(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(\"a\")", + "query": "from a_index | eval var = pow(to_integer(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "row to_datetime(\"a\")", + "query": "from a_index | eval var = pow(longField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_dt(\"a\")", + "query": "from a_index | eval pow(longField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(stringField)", + "query": "from a_index | eval var = pow(longField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(stringField)", + "query": "from a_index | eval var = pow(longField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(stringField)", + "query": "from a_index | eval pow(longField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(*)", - "error": [ - "Using wildcards (*) in to_datetime is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | sort to_datetime(stringField)", + "query": "from a_index | eval var = pow(longField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_datetime(now())", + "query": "from a_index | eval var = pow(longField, longField)", "error": [], "warning": [] }, { - "query": "row to_datetime(now())", + "query": "from a_index | eval pow(longField, longField)", "error": [], "warning": [] }, { - "query": "row var = to_dt(now())", + "query": "from a_index | eval var = pow(longField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(to_datetime(now()))", + "query": "from a_index | eval pow(longField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(5)", + "query": "from a_index | eval var = pow(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "row to_datetime(5)", + "query": "from a_index | eval pow(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_dt(5)", + "query": "from a_index | eval var = pow(unsignedLongField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_datetime(to_integer(true))", + "query": "from a_index | eval var = pow(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(to_string(true))", + "query": "from a_index | eval pow(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(true)", - "error": [ - "Argument of [to_datetime] must be [date], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = pow(unsignedLongField, to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(dateField)", + "query": "from a_index | eval var = pow(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(dateField)", + "query": "from a_index | eval pow(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(dateField)", + "query": "from a_index | eval var = pow(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(to_datetime(dateField))", + "query": "from a_index | eval pow(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(booleanField)", + "query": "from a_index | eval pow(doubleField, doubleField, extraArg)", "error": [ - "Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]" + "Error: [pow] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(numberField)", + "query": "from a_index | sort pow(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(numberField)", + "query": "from a_index | eval pow(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(numberField)", + "query": "row nullVar = null | eval pow(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(to_integer(booleanField))", + "query": "row var = repeat(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(to_string(booleanField))", + "query": "row repeat(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(dateField, extraArg)", + "query": "row var = repeat(to_string(true), to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = repeat(true, true)", "error": [ - "Error: [to_datetime] function expects exactly one argument, got 2." + "Argument of [repeat] must be [keyword], found value [true] type [boolean]", + "Argument of [repeat] must be [integer], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_datetime(dateField)", + "query": "from a_index | eval var = repeat(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(null)", + "query": "from a_index | eval repeat(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_datetime(nullVar)", + "query": "from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_degrees(5)", - "error": [], + "query": "from a_index | eval repeat(booleanField, booleanField)", + "error": [ + "Argument of [repeat] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [repeat] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row to_degrees(5)", + "query": "from a_index | eval var = repeat(textField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(to_integer(\"a\"))", + "query": "from a_index | eval repeat(textField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(\"a\")", + "query": "from a_index | eval repeat(keywordField, integerField, extraArg)", "error": [ - "Argument of [to_degrees] must be [number], found value [\"a\"] type [string]" + "Error: [repeat] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where to_degrees(numberField) > 0", + "query": "from a_index | sort repeat(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(stringField) > 0", - "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(numberField)", + "query": "from a_index | eval repeat(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField)", + "query": "row nullVar = null | eval repeat(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(to_integer(stringField))", + "query": "row var = replace(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(stringField)", - "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" - ], + "query": "row replace(\"a\", \"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField, extraArg)", - "error": [ - "Error: [to_degrees] function expects exactly one argument, got 2." - ], + "query": "row var = replace(to_string(true), to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(*)", + "query": "row var = replace(true, true, true)", "error": [ - "Using wildcards (*) in to_degrees is not allowed" + "Argument of [replace] must be [keyword], found value [true] type [boolean]", + "Argument of [replace] must be [keyword], found value [true] type [boolean]", + "Argument of [replace] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_degrees(numberField)", + "query": "from a_index | eval var = replace(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(to_integer(true))", + "query": "from a_index | eval replace(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(true)", - "error": [ - "Argument of [to_degrees] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(booleanField) > 0", + "query": "from a_index | eval replace(booleanField, booleanField, booleanField)", "error": [ - "Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]" + "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(to_integer(booleanField))", + "query": "from a_index | eval var = replace(keywordField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(booleanField)", - "error": [ - "Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval replace(keywordField, keywordField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(null)", + "query": "from a_index | eval var = replace(keywordField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_degrees(nullVar)", + "query": "from a_index | eval replace(keywordField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_double(\"a\")", + "query": "from a_index | eval var = replace(keywordField, textField, textField)", "error": [], "warning": [] }, { - "query": "row to_double(\"a\")", + "query": "from a_index | eval replace(keywordField, textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_dbl(\"a\")", + "query": "from a_index | eval var = replace(textField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(stringField)", + "query": "from a_index | eval replace(textField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(stringField)", + "query": "from a_index | eval var = replace(textField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(stringField)", + "query": "from a_index | eval replace(textField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(*)", - "error": [ - "Using wildcards (*) in to_double is not allowed" - ], + "query": "from a_index | eval var = replace(textField, textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_double(stringField)", + "query": "from a_index | eval replace(textField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_double(true)", + "query": "from a_index | eval var = replace(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "row to_double(true)", + "query": "from a_index | eval replace(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_dbl(true)", - "error": [], + "query": "from a_index | eval replace(keywordField, keywordField, keywordField, extraArg)", + "error": [ + "Error: [replace] function expects exactly 3 arguments, got 4." + ], "warning": [] }, { - "query": "row var = to_double(to_boolean(true))", + "query": "from a_index | sort replace(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_double(5)", + "query": "from a_index | eval replace(null, null, null)", "error": [], "warning": [] }, { - "query": "row to_double(5)", + "query": "row nullVar = null | eval replace(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_dbl(5)", + "query": "row var = right(\"a\", 5)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_integer(true))", + "query": "row right(\"a\", 5)", "error": [], "warning": [] }, { - "query": "row var = to_double(now())", + "query": "row var = right(to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row to_double(now())", - "error": [], + "query": "row var = right(true, true)", + "error": [ + "Argument of [right] must be [keyword], found value [true] type [boolean]", + "Argument of [right] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_dbl(now())", + "query": "from a_index | eval var = right(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_datetime(now()))", + "query": "from a_index | eval right(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_string(true))", + "query": "from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_double(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval right(booleanField, booleanField)", "error": [ - "Argument of [to_double] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Argument of [right] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [right] must be [integer], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where to_double(booleanField) > 0", + "query": "from a_index | eval var = right(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_double(cartesianPointField) > 0", - "error": [ - "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval right(textField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | where to_double(numberField) > 0", - "error": [], + "query": "from a_index | eval right(keywordField, integerField, extraArg)", + "error": [ + "Error: [right] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | where to_double(dateField) > 0", + "query": "from a_index | sort right(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_double(stringField) > 0", + "query": "from a_index | eval right(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(booleanField)", + "query": "row nullVar = null | eval right(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(booleanField)", + "query": "row var = round(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(booleanField)", + "query": "row round(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_boolean(booleanField))", + "query": "row var = round(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(cartesianPointField)", - "error": [ - "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "row var = round(5.5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(numberField)", + "query": "row round(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(numberField)", + "query": "row var = round(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(numberField)", + "query": "row var = round(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_integer(booleanField))", + "query": "row round(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(dateField)", + "query": "row var = round(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(dateField)", + "query": "row var = round(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(dateField)", + "query": "row round(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_datetime(dateField))", + "query": "row var = round(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_string(booleanField))", + "query": "row var = round(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(booleanField, extraArg)", + "query": "row var = round(true, true)", "error": [ - "Error: [to_double] function expects exactly one argument, got 2." + "Argument of [round] must be [double], found value [true] type [boolean]", + "Argument of [round] must be [integer], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_double(booleanField)", + "query": "from a_index | where round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(null)", - "error": [], + "query": "from a_index | where round(booleanField) > 0", + "error": [ + "Argument of [round] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row nullVar = null | eval to_double(nullVar)", + "query": "from a_index | where round(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(\"a\")", - "error": [], + "query": "from a_index | where round(booleanField, booleanField) > 0", + "error": [ + "Argument of [round] must be [double], found value [booleanField] type [boolean]", + "Argument of [round] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row to_geopoint(\"a\")", + "query": "from a_index | where round(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(stringField)", + "query": "from a_index | where round(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(stringField)", + "query": "from a_index | where round(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(*)", - "error": [ - "Using wildcards (*) in to_geopoint is not allowed" - ], + "query": "from a_index | where round(longField, integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_geopoint(stringField)", + "query": "from a_index | where round(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = round(doubleField)", "error": [], "warning": [] }, { - "query": "row to_geopoint(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval round(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = round(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(to_string(true))", - "error": [], + "query": "from a_index | eval round(booleanField)", + "error": [ + "Argument of [round] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_geopoint(true)", + "query": "from a_index | eval var = round(*)", "error": [ - "Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]" + "Using wildcards (*) in round is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(geoPointField)", + "query": "from a_index | eval var = round(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(geoPointField)", + "query": "from a_index | eval round(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(to_geopoint(geoPointField))", + "query": "from a_index | eval var = round(to_double(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(booleanField)", + "query": "from a_index | eval round(booleanField, booleanField)", "error": [ - "Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]" + "Argument of [round] must be [double], found value [booleanField] type [boolean]", + "Argument of [round] must be [integer], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(to_string(booleanField))", + "query": "from a_index | eval var = round(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(geoPointField, extraArg)", - "error": [ - "Error: [to_geopoint] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval round(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_geopoint(geoPointField)", + "query": "from a_index | eval var = round(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(null)", + "query": "from a_index | eval var = round(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_geopoint(nullVar)", + "query": "from a_index | eval round(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(\"a\")", + "query": "from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row to_geoshape(\"a\")", + "query": "from a_index | eval var = round(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(stringField)", + "query": "from a_index | eval round(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(stringField)", + "query": "from a_index | eval var = round(longField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(*)", - "error": [ - "Using wildcards (*) in to_geoshape is not allowed" - ], + "query": "from a_index | eval round(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = round(longField, to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_geoshape(stringField)", + "query": "from a_index | eval var = round(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval round(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row to_geoshape(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval round(doubleField, integerField, extraArg)", + "error": [ + "Error: [round] function expects no more than 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort round(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval round(null, null)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geoshape(\"POINT (30 10)\"))", + "query": "row nullVar = null | eval round(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row to_geoshape(to_geoshape(\"POINT (30 10)\"))", + "query": "row var = rtrim(\"a\")", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row rtrim(\"a\")", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_string(true))", + "query": "row var = rtrim(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(true)", + "query": "row var = rtrim(true)", "error": [ - "Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]" + "Argument of [rtrim] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(geoPointField)", + "query": "from a_index | eval var = rtrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(geoPointField)", + "query": "from a_index | eval rtrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(to_geopoint(geoPointField))", + "query": "from a_index | eval var = rtrim(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(booleanField)", + "query": "from a_index | eval rtrim(booleanField)", "error": [ - "Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]" + "Argument of [rtrim] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(geoShapeField)", - "error": [], + "query": "from a_index | eval var = rtrim(*)", + "error": [ + "Using wildcards (*) in rtrim is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval to_geoshape(geoShapeField)", + "query": "from a_index | eval var = rtrim(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(to_geoshape(geoPointField))", + "query": "from a_index | eval rtrim(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(geoPointField, extraArg)", + "query": "from a_index | eval rtrim(keywordField, extraArg)", "error": [ - "Error: [to_geoshape] function expects exactly one argument, got 2." + "Error: [rtrim] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort to_geoshape(geoPointField)", + "query": "from a_index | sort rtrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(null)", + "query": "from a_index | eval rtrim(null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_geoshape(nullVar)", + "query": "row nullVar = null | eval rtrim(nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_integer(\"a\")", + "query": "row var = signum(5.5)", "error": [], "warning": [] }, { - "query": "row to_integer(\"a\")", + "query": "row signum(5.5)", "error": [], "warning": [] }, { - "query": "row var = to_int(\"a\")", + "query": "row var = signum(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(stringField)", + "query": "row var = signum(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(stringField)", + "query": "row signum(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(stringField)", + "query": "row var = signum(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(*)", + "query": "row var = signum(true)", "error": [ - "Using wildcards (*) in to_integer is not allowed" + "Argument of [signum] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_integer(stringField)", + "query": "from a_index | where signum(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_integer(true)", + "query": "from a_index | where signum(booleanField) > 0", + "error": [ + "Argument of [signum] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where signum(integerField) > 0", "error": [], "warning": [] }, { - "query": "row to_integer(true)", + "query": "from a_index | where signum(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_int(true)", + "query": "from a_index | where signum(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_boolean(true))", + "query": "from a_index | eval var = signum(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(5)", + "query": "from a_index | eval signum(doubleField)", "error": [], "warning": [] }, { - "query": "row to_integer(5)", + "query": "from a_index | eval var = signum(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_int(5)", + "query": "from a_index | eval signum(booleanField)", + "error": [ + "Argument of [signum] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = signum(*)", + "error": [ + "Using wildcards (*) in signum is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = signum(integerField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_integer(true))", + "query": "from a_index | eval signum(integerField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(now())", + "query": "from a_index | eval var = signum(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row to_integer(now())", + "query": "from a_index | eval var = signum(longField)", "error": [], "warning": [] }, { - "query": "row var = to_int(now())", + "query": "from a_index | eval signum(longField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_datetime(now()))", + "query": "from a_index | eval var = signum(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_string(true))", + "query": "from a_index | eval signum(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval signum(doubleField, extraArg)", "error": [ - "Argument of [to_integer] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Error: [signum] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where to_integer(booleanField) > 0", + "query": "from a_index | sort signum(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_integer(cartesianPointField) > 0", - "error": [ - "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval signum(null)", + "error": [], "warning": [] }, { - "query": "from a_index | where to_integer(numberField) > 0", + "query": "row nullVar = null | eval signum(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | where to_integer(dateField) > 0", + "query": "row var = sin(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | where to_integer(stringField) > 0", + "query": "row sin(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(booleanField)", + "query": "row var = sin(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(booleanField)", + "query": "row var = sin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(booleanField)", + "query": "row sin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_boolean(booleanField))", + "query": "row var = sin(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(cartesianPointField)", + "query": "row var = sin(true)", "error": [ - "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [sin] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_integer(numberField)", + "query": "from a_index | where sin(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(numberField)", - "error": [], + "query": "from a_index | where sin(booleanField) > 0", + "error": [ + "Argument of [sin] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_int(numberField)", + "query": "from a_index | where sin(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_integer(booleanField))", + "query": "from a_index | where sin(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(dateField)", + "query": "from a_index | where sin(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(dateField)", + "query": "from a_index | eval var = sin(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(dateField)", + "query": "from a_index | eval sin(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_datetime(dateField))", + "query": "from a_index | eval var = sin(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_string(booleanField))", - "error": [], + "query": "from a_index | eval sin(booleanField)", + "error": [ + "Argument of [sin] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval to_integer(booleanField, extraArg)", + "query": "from a_index | eval var = sin(*)", "error": [ - "Error: [to_integer] function expects exactly one argument, got 2." + "Using wildcards (*) in sin is not allowed" ], "warning": [] }, { - "query": "from a_index | sort to_integer(booleanField)", + "query": "from a_index | eval var = sin(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(null)", + "query": "from a_index | eval sin(integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_integer(nullVar)", + "query": "from a_index | eval var = sin(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_ip(\"a\")", + "query": "from a_index | eval var = sin(longField)", "error": [], "warning": [] }, { - "query": "row to_ip(\"a\")", + "query": "from a_index | eval sin(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(stringField)", + "query": "from a_index | eval var = sin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(stringField)", + "query": "from a_index | eval sin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(*)", + "query": "from a_index | eval sin(doubleField, extraArg)", "error": [ - "Using wildcards (*) in to_ip is not allowed" + "Error: [sin] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort to_ip(stringField)", + "query": "from a_index | sort sin(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_ip(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval sin(null)", "error": [], "warning": [] }, { - "query": "row to_ip(to_ip(\"127.0.0.1\"))", + "query": "row nullVar = null | eval sin(nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_ip(to_ip(to_ip(\"127.0.0.1\")))", + "query": "row var = sinh(5.5)", "error": [], "warning": [] }, { - "query": "row var = to_ip(to_string(true))", + "query": "row sinh(5.5)", "error": [], "warning": [] }, { - "query": "row var = to_ip(true)", - "error": [ - "Argument of [to_ip] must be [ip], found value [true] type [boolean]" - ], + "query": "row var = sinh(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(ipField)", + "query": "row var = sinh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(ipField)", + "query": "row sinh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(to_ip(ipField))", + "query": "row var = sinh(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(booleanField)", + "query": "row var = sinh(true)", "error": [ - "Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]" + "Argument of [sinh] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_ip(to_string(booleanField))", + "query": "from a_index | where sinh(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(ipField, extraArg)", + "query": "from a_index | where sinh(booleanField) > 0", "error": [ - "Error: [to_ip] function expects exactly one argument, got 2." + "Argument of [sinh] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_ip(ipField)", + "query": "from a_index | where sinh(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(null)", + "query": "from a_index | where sinh(longField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_ip(nullVar)", + "query": "from a_index | where sinh(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_long(\"a\")", + "query": "from a_index | eval var = sinh(doubleField)", "error": [], "warning": [] }, { - "query": "row to_long(\"a\")", + "query": "from a_index | eval sinh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(stringField)", + "query": "from a_index | eval var = sinh(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(stringField)", - "error": [], + "query": "from a_index | eval sinh(booleanField)", + "error": [ + "Argument of [sinh] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_long(*)", + "query": "from a_index | eval var = sinh(*)", "error": [ - "Using wildcards (*) in to_long is not allowed" + "Using wildcards (*) in sinh is not allowed" ], "warning": [] }, { - "query": "from a_index | sort to_long(stringField)", + "query": "from a_index | eval var = sinh(integerField)", "error": [], "warning": [] }, { - "query": "row var = to_long(true)", + "query": "from a_index | eval sinh(integerField)", "error": [], "warning": [] }, { - "query": "row to_long(true)", + "query": "from a_index | eval var = sinh(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_long(to_boolean(true))", + "query": "from a_index | eval var = sinh(longField)", "error": [], "warning": [] }, { - "query": "row var = to_long(5)", + "query": "from a_index | eval sinh(longField)", "error": [], "warning": [] }, { - "query": "row to_long(5)", + "query": "from a_index | eval var = sinh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_long(to_integer(true))", + "query": "from a_index | eval sinh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_long(now())", + "query": "from a_index | eval sinh(doubleField, extraArg)", + "error": [ + "Error: [sinh] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort sinh(doubleField)", "error": [], "warning": [] }, { - "query": "row to_long(now())", + "query": "from a_index | eval sinh(null)", "error": [], "warning": [] }, { - "query": "row var = to_long(to_datetime(now()))", + "query": "row nullVar = null | eval sinh(nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_long(to_string(true))", + "query": "row var = split(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = to_long(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], + "query": "row split(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where to_long(booleanField) > 0", + "query": "row var = split(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where to_long(cartesianPointField) > 0", + "query": "row var = split(true, true)", "error": [ - "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [split] must be [keyword], found value [true] type [boolean]", + "Argument of [split] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where to_long(numberField) > 0", + "query": "from a_index | eval var = split(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_long(dateField) > 0", + "query": "from a_index | eval split(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_long(stringField) > 0", + "query": "from a_index | eval var = split(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(booleanField)", - "error": [], + "query": "from a_index | eval split(booleanField, booleanField)", + "error": [ + "Argument of [split] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [split] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval to_long(booleanField)", + "query": "from a_index | eval var = split(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_boolean(booleanField))", + "query": "from a_index | eval split(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(cartesianPointField)", - "error": [ - "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(numberField)", + "query": "from a_index | eval var = split(textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(numberField)", + "query": "from a_index | eval split(textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_integer(booleanField))", + "query": "from a_index | eval var = split(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(dateField)", + "query": "from a_index | eval split(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(dateField)", - "error": [], + "query": "from a_index | eval split(keywordField, keywordField, extraArg)", + "error": [ + "Error: [split] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_datetime(dateField))", + "query": "from a_index | sort split(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_string(booleanField))", + "query": "from a_index | eval split(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(booleanField, extraArg)", - "error": [ - "Error: [to_long] function expects exactly one argument, got 2." - ], + "query": "row nullVar = null | eval split(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_long(booleanField)", + "query": "row var = sqrt(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(null)", + "query": "row sqrt(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_long(nullVar)", + "query": "row var = sqrt(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = to_lower(\"a\")", + "query": "row var = sqrt(5)", "error": [], "warning": [] }, { - "query": "row to_lower(\"a\")", + "query": "row sqrt(5)", "error": [], "warning": [] }, { - "query": "row var = to_lower(to_string(\"a\"))", + "query": "row var = sqrt(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = to_lower(5)", + "query": "row var = sqrt(true)", "error": [ - "Argument of [to_lower] must be [string], found value [5] type [number]" + "Argument of [sqrt] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(to_lower(stringField)) > 0", + "query": "from a_index | where sqrt(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_lower(numberField)) > 0", + "query": "from a_index | where sqrt(booleanField) > 0", "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" + "Argument of [sqrt] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_lower(stringField)", + "query": "from a_index | where sqrt(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(stringField)", + "query": "from a_index | where sqrt(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(to_string(stringField))", + "query": "from a_index | where sqrt(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(numberField)", - "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval to_lower(stringField, extraArg)", - "error": [ - "Error: [to_lower] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_lower(*)", - "error": [ - "Using wildcards (*) in to_lower is not allowed" - ], + "query": "from a_index | eval var = sqrt(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_lower(stringField)", + "query": "from a_index | eval sqrt(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_lower(to_string(true))", + "query": "from a_index | eval var = sqrt(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_lower(true)", + "query": "from a_index | eval sqrt(booleanField)", "error": [ - "Argument of [to_lower] must be [string], found value [true] type [boolean]" + "Argument of [sqrt] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(to_lower(booleanField)) > 0", + "query": "from a_index | eval var = sqrt(*)", "error": [ - "Argument of [to_lower] must be [string], found value [booleanField] type [boolean]" + "Using wildcards (*) in sqrt is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = to_lower(to_string(booleanField))", + "query": "from a_index | eval var = sqrt(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(booleanField)", - "error": [ - "Argument of [to_lower] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval sqrt(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(null)", + "query": "from a_index | eval var = sqrt(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_lower(nullVar)", + "query": "from a_index | eval var = sqrt(longField)", "error": [], "warning": [] }, { - "query": "row var = to_radians(5)", + "query": "from a_index | eval sqrt(longField)", "error": [], "warning": [] }, { - "query": "row to_radians(5)", + "query": "from a_index | eval var = sqrt(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_radians(to_integer(\"a\"))", + "query": "from a_index | eval sqrt(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_radians(\"a\")", + "query": "from a_index | eval sqrt(doubleField, extraArg)", "error": [ - "Argument of [to_radians] must be [number], found value [\"a\"] type [string]" + "Error: [sqrt] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where to_radians(numberField) > 0", + "query": "from a_index | sort sqrt(doubleField)", "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 sqrt(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(numberField)", + "query": "row nullVar = null | eval sqrt(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(numberField)", - "error": [], + "query": "row var = st_contains(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_radians(to_integer(stringField))", - "error": [], + "query": "row st_contains(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_radians(stringField)", + "query": "row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [to_radians] must be [number], found value [stringField] type [string]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval to_radians(numberField, extraArg)", + "query": "row var = st_contains(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", "error": [ - "Error: [to_radians] function expects exactly one argument, got 2." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_radians(*)", + "query": "row st_contains(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", "error": [ - "Using wildcards (*) in to_radians is not allowed" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | sort to_radians(numberField)", - "error": [], + "query": "row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_radians(to_integer(true))", - "error": [], + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_radians(true)", + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", "error": [ - "Argument of [to_radians] must be [number], found value [true] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where to_radians(booleanField) > 0", + "query": "row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [to_radians] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_radians(to_integer(booleanField))", + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(booleanField)", - "error": [ - "Argument of [to_radians] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(null)", + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_radians(nullVar)", - "error": [], + "query": "row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_string(\"a\")", - "error": [], + "query": "row var = st_contains(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row to_string(\"a\")", - "error": [], + "query": "row st_contains(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_str(\"a\")", - "error": [], + "query": "row var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(stringField)", - "error": [], + "query": "row var = st_contains(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(stringField)", - "error": [], + "query": "row st_contains(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(stringField)", - "error": [], + "query": "row var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(*)", + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), geoPointField)", "error": [ - "Using wildcards (*) in to_string is not allowed" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort to_string(stringField)", - "error": [], + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_string(true)", - "error": [], + "query": "row var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row to_string(true)", + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_str(true)", + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_boolean(true))", - "error": [], + "query": "row var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_string(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = st_contains(true, true)", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row to_string(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_str(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval st_contains(booleanField, booleanField)", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row to_string(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_str(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(now())", + "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row to_string(now())", + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_str(now())", + "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_datetime(now()))", + "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_string(5)", + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row to_string(5)", + "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_str(5)", + "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_integer(true))", + "query": "from a_index | eval st_contains(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row to_string(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_str(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "row to_string(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_str(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row to_string(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_str(to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "row var = to_string(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | sort st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_string(true))", + "query": "from a_index | eval st_contains(null, null)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_version(\"1.0.0\"))", + "query": "row nullVar = null | eval st_contains(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row to_string(to_version(\"1.0.0\"))", - "error": [], + "query": "row var = st_disjoint(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_str(to_version(\"1.0.0\"))", - "error": [], + "query": "row st_disjoint(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_string(to_version(\"a\"))", - "error": [], + "query": "row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(booleanField)) > 0", - "error": [], + "query": "row var = st_disjoint(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(cartesianPointField)) > 0", - "error": [], + "query": "row st_disjoint(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(cartesianShapeField)) > 0", - "error": [], + "query": "row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(dateField)) > 0", - "error": [], + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(numberField)) > 0", - "error": [], + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(geoPointField)) > 0", - "error": [], + "query": "row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(geoShapeField)) > 0", + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_string(ipField)) > 0", + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_string(stringField)) > 0", - "error": [], + "query": "row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(versionField)) > 0", - "error": [], + "query": "row var = st_disjoint(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(booleanField)", - "error": [], + "query": "row st_disjoint(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(booleanField)", - "error": [], + "query": "row var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(booleanField)", - "error": [], + "query": "row var = st_disjoint(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_boolean(booleanField))", - "error": [], + "query": "row st_disjoint(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(cartesianPointField)", - "error": [], + "query": "row var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(cartesianPointField)", - "error": [], + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(cartesianPointField)", - "error": [], + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))", - "error": [], + "query": "row var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(cartesianShapeField)", + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(cartesianShapeField)", + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(cartesianShapeField)", - "error": [], + "query": "row var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))", - "error": [], + "query": "row var = st_disjoint(true, true)", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(dateField)", + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(dateField)", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(dateField)", + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_datetime(dateField))", - "error": [], + "query": "from a_index | eval st_disjoint(booleanField, booleanField)", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(numberField)", + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(numberField)", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(numberField)", + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_integer(booleanField))", + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(geoPointField)", + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(geoPointField)", + "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(geoPointField)", + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_geopoint(geoPointField))", + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(geoShapeField)", + "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(geoShapeField)", + "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(geoShapeField)", + "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_geoshape(geoPointField))", + "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(ipField)", + "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(ipField)", + "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(ipField)", + "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_ip(ipField))", + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_string(booleanField))", + "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(versionField)", + "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(versionField)", + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(versionField)", + "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_version(stringField))", + "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(booleanField, extraArg)", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", "error": [ - "Error: [to_string] function expects exactly one argument, got 2." + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort to_string(booleanField)", + "query": "from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(null)", + "query": "from a_index | eval st_disjoint(null, null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_string(nullVar)", + "query": "row nullVar = null | eval st_disjoint(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(\"a\")", - "error": [], + "query": "row var = st_distance(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row to_unsigned_long(\"a\")", - "error": [], + "query": "row st_distance(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_ul(\"a\")", - "error": [], + "query": "row var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_ulong(\"a\")", - "error": [], + "query": "row var = st_distance(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(stringField)", - "error": [], + "query": "row st_distance(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = st_distance(true, true)", + "error": [ + "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(stringField)", + "query": "from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ul(stringField)", + "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(stringField)", + "query": "from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(*)", + "query": "from a_index | eval st_distance(booleanField, booleanField)", "error": [ - "Using wildcards (*) in to_unsigned_long is not allowed" + "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_unsigned_long(stringField)", + "query": "from a_index | eval var = st_distance(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(true)", + "query": "from a_index | eval st_distance(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row to_unsigned_long(true)", + "query": "from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_ul(true)", - "error": [], + "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_distance] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "row var = to_ulong(true)", + "query": "from a_index | sort st_distance(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(to_boolean(true))", + "query": "from a_index | eval st_distance(null, null)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(now())", + "query": "row nullVar = null | eval st_distance(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row to_unsigned_long(now())", - "error": [], + "query": "row var = st_intersects(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_ul(now())", - "error": [], + "query": "row st_intersects(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_ulong(now())", - "error": [], + "query": "row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_unsigned_long(to_datetime(now()))", - "error": [], + "query": "row var = st_intersects(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_unsigned_long(5)", - "error": [], + "query": "row st_intersects(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row to_unsigned_long(5)", - "error": [], + "query": "row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_ul(5)", - "error": [], + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_ulong(5)", - "error": [], + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_unsigned_long(to_integer(true))", + "query": "row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(to_string(true))", + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(booleanField) > 0", - "error": [], + "query": "row var = st_intersects(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(cartesianPointField) > 0", + "query": "row st_intersects(geoPointField, geoPointField)", "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(dateField) > 0", - "error": [], + "query": "row var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(numberField) > 0", - "error": [], + "query": "row var = st_intersects(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(stringField) > 0", - "error": [], + "query": "row st_intersects(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(booleanField)", - "error": [], + "query": "row var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(booleanField)", - "error": [], + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ul(booleanField)", - "error": [], + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(booleanField)", + "query": "row var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_boolean(booleanField))", + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(cartesianPointField)", + "query": "row var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(dateField)", - "error": [], + "query": "row var = st_intersects(true, true)", + "error": [ + "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(dateField)", + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ul(dateField)", + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(dateField)", + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_datetime(dateField))", + "query": "from a_index | eval st_intersects(booleanField, booleanField)", + "error": [ + "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(numberField)", + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(numberField)", + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ul(numberField)", + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(numberField)", + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_integer(booleanField))", + "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_string(booleanField))", + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(booleanField, extraArg)", - "error": [ - "Error: [to_unsigned_long] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_unsigned_long(booleanField)", + "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(null)", + "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_unsigned_long(nullVar)", + "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_upper(\"a\")", + "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row to_upper(\"a\")", + "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_upper(to_string(\"a\"))", + "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_upper(5)", - "error": [ - "Argument of [to_upper] must be [string], found value [5] type [number]" - ], + "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(stringField)) > 0", + "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(numberField)) > 0", - "error": [ - "Argument of [to_upper] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_upper(stringField)", + "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(stringField)", + "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_upper(to_string(stringField))", + "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(numberField)", - "error": [ - "Argument of [to_upper] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(stringField, extraArg)", + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)", "error": [ - "Error: [to_upper] function expects exactly one argument, got 2." + "Error: [st_intersects] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = to_upper(*)", - "error": [ - "Using wildcards (*) in to_upper is not allowed" - ], + "query": "from a_index | sort st_intersects(cartesianPointField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_upper(stringField)", + "query": "from a_index | eval st_intersects(null, null)", "error": [], "warning": [] }, { - "query": "row var = to_upper(to_string(true))", + "query": "row nullVar = null | eval st_intersects(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_upper(true)", + "query": "row var = st_within(cartesianPointField, cartesianPointField)", "error": [ - "Argument of [to_upper] must be [string], found value [true] type [boolean]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where length(to_upper(booleanField)) > 0", + "query": "row st_within(cartesianPointField, cartesianPointField)", "error": [ - "Argument of [to_upper] must be [string], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_upper(to_string(booleanField))", - "error": [], + "query": "row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_upper(booleanField)", + "query": "row var = st_within(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", "error": [ - "Argument of [to_upper] must be [string], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval to_upper(null)", - "error": [], + "query": "row st_within(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row nullVar = null | eval to_upper(nullVar)", - "error": [], + "query": "row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_version(\"a\")", - "error": [], + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row to_version(\"a\")", - "error": [], + "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_ver(\"a\")", - "error": [], + "query": "row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_version(stringField)", + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_version(stringField)", + "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ver(stringField)", - "error": [], + "query": "row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_version(*)", + "query": "row var = st_within(geoPointField, geoPointField)", "error": [ - "Using wildcards (*) in to_version is not allowed" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort to_version(stringField)", - "error": [], + "query": "row st_within(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_version(to_version(\"1.0.0\"))", - "error": [], + "query": "row var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row to_version(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ver(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_version(true)", + "query": "row var = st_within(geoPointField, to_geoshape(\"POINT (30 10)\"))", "error": [ - "Argument of [to_version] must be [string], found value [true] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_version(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_version(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ver(versionField)", - "error": [], + "query": "row st_within(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_version(stringField, extraArg)", + "query": "row var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", "error": [ - "Error: [to_version] function expects exactly one argument, got 2." + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval to_version(null)", - "error": [], + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row nullVar = null | eval to_version(nullVar)", - "error": [], + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = trim(\"a\")", - "error": [], + "query": "row var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row trim(\"a\")", + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = trim(to_string(\"a\"))", + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = trim(5)", + "query": "row var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [ - "Argument of [trim] must be [string], found value [5] type [number]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where length(trim(stringField)) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where length(trim(numberField)) > 0", + "query": "row var = st_within(true, true)", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = trim(stringField)", + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(stringField)", + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = trim(to_string(stringField))", + "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(numberField)", - "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval trim(stringField, extraArg)", - "error": [ - "Error: [trim] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | eval var = trim(*)", + "query": "from a_index | eval st_within(booleanField, booleanField)", "error": [ - "Using wildcards (*) in trim is not allowed" + "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort trim(stringField)", + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = trim(to_string(true))", + "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = trim(true)", - "error": [ - "Argument of [trim] must be [string], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(trim(booleanField)) > 0", - "error": [ - "Argument of [trim] must be [string], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = trim(to_string(booleanField))", + "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(booleanField)", - "error": [ - "Argument of [trim] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval trim(null)", + "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval trim(nullVar)", + "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(numberField)", + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField)", + "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(avg(numberField))", + "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(avg(numberField))", + "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(avg(numberField)) + avg(numberField)", + "query": "from a_index | eval st_within(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(avg(numberField)) + avg(numberField)", + "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField / 2)", + "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField / 2)", + "query": "from a_index | eval st_within(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField / 2)", + "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField / 2)", + "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField)", + "query": "from a_index | eval st_within(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField)", + "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField)", + "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by round(numberField / 2)", + "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField", - "error": [], + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | sort st_within(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval st_within(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row nullVar = null | eval st_within(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(avg(numberField))", + "query": "row var = st_x(cartesianPointField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | stats avg(avg(numberField))", + "query": "row st_x(cartesianPointField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | stats avg(stringField)", + "query": "row var = st_x(to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [avg] must be [number], found value [stringField] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = avg(*)", + "query": "row var = st_x(geoPointField)", "error": [ - "Using wildcards (*) in avg is not allowed" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort avg(numberField)", + "query": "row st_x(geoPointField)", "error": [ - "SORT does not support function avg" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where avg(numberField)", + "query": "row var = st_x(to_geopoint(geoPointField))", "error": [ - "WHERE does not support function avg" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where avg(numberField) > 0", + "query": "row var = st_x(true)", "error": [ - "WHERE does not support function avg" + "Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField)", - "error": [ - "EVAL does not support function avg" - ], + "query": "from a_index | eval var = st_x(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField) > 0", - "error": [ - "EVAL does not support function avg" - ], + "query": "from a_index | eval st_x(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval avg(numberField)", - "error": [ - "EVAL does not support function avg" - ], + "query": "from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval avg(numberField) > 0", + "query": "from a_index | eval st_x(booleanField)", "error": [ - "EVAL does not support function avg" + "Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats avg(booleanField)", + "query": "from a_index | eval var = st_x(*)", "error": [ - "Argument of [avg] must be [number], found value [booleanField] type [boolean]" + "Using wildcards (*) in st_x is not allowed" ], "warning": [] }, { - "query": "from a_index | stats avg(null)", + "query": "from a_index | eval var = st_x(geoPointField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats avg(nullVar)", + "query": "from a_index | eval st_x(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(numberField)", + "query": "from a_index | eval var = st_x(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField)", - "error": [], + "query": "from a_index | eval st_x(cartesianPointField, extraArg)", + "error": [ + "Error: [st_x] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField))", + "query": "from a_index | sort st_x(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField))", + "query": "from a_index | eval st_x(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", + "query": "row nullVar = null | eval st_x(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", - "error": [], + "query": "row var = st_y(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats sum(numberField / 2)", - "error": [], + "query": "row st_y(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField / 2)", - "error": [], + "query": "row var = st_y(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField / 2)", - "error": [], + "query": "row var = st_y(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", - "error": [], + "query": "row st_y(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField)", - "error": [], + "query": "row var = st_y(to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField)", - "error": [], + "query": "row var = st_y(true)", + "error": [ + "Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", + "query": "from a_index | eval var = st_y(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField) by round(numberField / 2)", + "query": "from a_index | eval st_y(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", - "error": [], + "query": "from a_index | eval st_y(booleanField)", + "error": [ + "Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(*)", + "error": [ + "Using wildcards (*) in st_y is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval var = st_y(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval st_y(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = st_y(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(avg(numberField))", + "query": "from a_index | eval st_y(cartesianPointField, extraArg)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Error: [st_y] function expects exactly one argument, got 2." ], "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 st_y(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats sum(stringField)", - "error": [ - "Argument of [sum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval st_y(null)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(*)", - "error": [ - "Using wildcards (*) in sum is not allowed" - ], + "query": "row nullVar = null | eval st_y(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sum(numberField)", - "error": [ - "SORT does not support function sum" - ], + "query": "row var = starts_with(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where sum(numberField)", - "error": [ - "WHERE does not support function sum" - ], + "query": "row starts_with(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where sum(numberField) > 0", - "error": [ - "WHERE does not support function sum" - ], + "query": "row var = starts_with(to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField)", + "query": "row var = starts_with(true, true)", "error": [ - "EVAL does not support function sum" + "Argument of [starts_with] must be [keyword], found value [true] type [boolean]", + "Argument of [starts_with] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField) > 0", - "error": [ - "EVAL does not support function sum" - ], + "query": "from a_index | eval var = starts_with(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval sum(numberField)", - "error": [ - "EVAL does not support function sum" - ], + "query": "from a_index | eval starts_with(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval sum(numberField) > 0", - "error": [ - "EVAL does not support function sum" - ], + "query": "from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats sum(booleanField)", + "query": "from a_index | eval starts_with(booleanField, booleanField)", "error": [ - "Argument of [sum] must be [number], found value [booleanField] type [boolean]" + "Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats sum(null)", + "query": "from a_index | eval var = starts_with(textField, textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats sum(nullVar)", + "query": "from a_index | eval starts_with(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(numberField)", - "error": [], + "query": "from a_index | eval starts_with(keywordField, keywordField, extraArg)", + "error": [ + "Error: [starts_with] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | stats median(numberField)", + "query": "from a_index | sort starts_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField))", + "query": "from a_index | eval starts_with(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField))", + "query": "row nullVar = null | eval starts_with(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField)) + median(numberField)", + "query": "row var = substring(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField)) + median(numberField)", + "query": "row substring(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField / 2)", + "query": "row var = substring(to_string(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField / 2)", - "error": [], + "query": "row var = substring(true, true, true)", + "error": [ + "Argument of [substring] must be [keyword], found value [true] type [boolean]", + "Argument of [substring] must be [integer], found value [true] type [boolean]", + "Argument of [substring] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField / 2)", + "query": "from a_index | eval var = substring(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField / 2)", + "query": "from a_index | eval substring(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField)", + "query": "from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField)", - "error": [], + "query": "from a_index | eval substring(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [substring] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [substring] must be [integer], found value [booleanField] type [boolean]", + "Argument of [substring] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField)", + "query": "from a_index | eval var = substring(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField) by round(numberField / 2)", + "query": "from a_index | eval substring(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", - "error": [], + "query": "from a_index | eval substring(keywordField, integerField, integerField, extraArg)", + "error": [ + "Error: [substring] function expects no more than 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", + "query": "from a_index | sort substring(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval substring(null, null, null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", + "query": "row nullVar = null | eval substring(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row var = tan(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | stats median(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row tan(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats median(stringField)", - "error": [ - "Argument of [median] must be [number], found value [stringField] type [string]" - ], + "query": "row var = tan(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(*)", - "error": [ - "Using wildcards (*) in median is not allowed" - ], + "query": "row var = tan(5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort median(numberField)", - "error": [ - "SORT does not support function median" - ], + "query": "row tan(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where median(numberField)", - "error": [ - "WHERE does not support function median" - ], + "query": "row var = tan(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where median(numberField) > 0", + "query": "row var = tan(true)", "error": [ - "WHERE does not support function median" + "Argument of [tan] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = median(numberField)", - "error": [ - "EVAL does not support function median" - ], + "query": "from a_index | where tan(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median(numberField) > 0", + "query": "from a_index | where tan(booleanField) > 0", "error": [ - "EVAL does not support function median" + "Argument of [tan] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval median(numberField)", - "error": [ - "EVAL does not support function median" - ], + "query": "from a_index | where tan(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval median(numberField) > 0", - "error": [ - "EVAL does not support function median" - ], + "query": "from a_index | where tan(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats median(booleanField)", - "error": [ - "Argument of [median] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | where tan(unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats median(null)", + "query": "from a_index | eval var = tan(doubleField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats median(nullVar)", + "query": "from a_index | eval tan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(numberField)", + "query": "from a_index | eval var = tan(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField)", - "error": [], + "query": "from a_index | eval tan(booleanField)", + "error": [ + "Argument of [tan] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", - "error": [], + "query": "from a_index | eval var = tan(*)", + "error": [ + "Using wildcards (*) in tan is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField))", + "query": "from a_index | eval var = tan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | eval tan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | eval var = tan(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval var = tan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval tan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval var = tan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval tan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField)", - "error": [], + "query": "from a_index | eval tan(doubleField, extraArg)", + "error": [ + "Error: [tan] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", + "query": "from a_index | sort tan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", + "query": "from a_index | eval tan(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", + "query": "row nullVar = null | eval tan(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", + "query": "row var = tanh(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", + "query": "row tanh(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField", + "query": "row var = tanh(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", + "query": "row var = tanh(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row tanh(5)", "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 = tanh(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(avg(numberField))", + "query": "row var = tanh(true)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [tanh] must be [double], found value [true] type [boolean]" ], "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 tanh(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(*)", + "query": "from a_index | where tanh(booleanField) > 0", "error": [ - "Using wildcards (*) in median_absolute_deviation is not allowed" + "Argument of [tanh] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort median_absolute_deviation(numberField)", - "error": [ - "SORT does not support function median_absolute_deviation" - ], + "query": "from a_index | where tanh(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], + "query": "from a_index | where tanh(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], + "query": "from a_index | where tanh(unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | eval var = tanh(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | eval tanh(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | eval var = tanh(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField) > 0", + "query": "from a_index | eval tanh(booleanField)", "error": [ - "EVAL does not support function median_absolute_deviation" + "Argument of [tanh] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(booleanField)", + "query": "from a_index | eval var = tanh(*)", "error": [ - "Argument of [median_absolute_deviation] must be [number], found value [booleanField] type [boolean]" + "Using wildcards (*) in tanh is not allowed" ], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats median_absolute_deviation(nullVar)", + "query": "from a_index | eval var = tanh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = percentile(numberField, 5)", + "query": "from a_index | eval tanh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5)", + "query": "from a_index | eval var = tanh(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5))", + "query": "from a_index | eval var = tanh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5))", + "query": "from a_index | eval tanh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | eval var = tanh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | eval tanh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, numberField)", + "query": "from a_index | eval tanh(doubleField, extraArg)", "error": [ - "Argument of [percentile] must be a constant, received [numberField]" + "Error: [tanh] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats percentile(numberField / 2, 5)", + "query": "from a_index | sort tanh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", + "query": "from a_index | eval tanh(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", + "query": "row nullVar = null | eval tanh(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", + "query": "row var = tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5)", + "query": "row tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", + "query": "from a_index | where tau() > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", + "query": "from a_index | eval var = tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", + "query": "from a_index | eval tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", - "error": [], + "query": "from a_index | eval tau(extraArg)", + "error": [ + "Error: [tau] function expects exactly 0 arguments, got 1." + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", + "query": "from a_index | sort tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", + "query": "row nullVar = null | eval tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", + "query": "row var = to_base64(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2", + "query": "row to_base64(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = percentile(avg(numberField), 5)", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row var = to_base64(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(avg(numberField), 5)", + "query": "row var = to_base64(true)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [to_base64] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats percentile(stringField, 5)", - "error": [ - "Argument of [percentile] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = to_base64(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort percentile(numberField, 5)", - "error": [ - "SORT does not support function percentile" - ], + "query": "from a_index | eval to_base64(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5)", - "error": [ - "WHERE does not support function percentile" - ], + "query": "from a_index | eval var = to_base64(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5) > 0", + "query": "from a_index | eval to_base64(booleanField)", "error": [ - "WHERE does not support function percentile" + "Argument of [to_base64] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5)", + "query": "from a_index | eval var = to_base64(*)", "error": [ - "EVAL does not support function percentile" + "Using wildcards (*) in to_base64 is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5) > 0", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval var = to_base64(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5)", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval to_base64(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5) > 0", + "query": "from a_index | eval to_base64(keywordField, extraArg)", "error": [ - "EVAL does not support function percentile" + "Error: [to_base64] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats percentile(booleanField, 5)", - "error": [ - "Argument of [percentile] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | sort to_base64(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(null, null)", + "query": "from a_index | eval to_base64(null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats percentile(nullVar, nullVar)", - "error": [ - "Argument of [percentile] must be a constant, received [nullVar]" - ], + "query": "row nullVar = null | eval to_base64(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(numberField)", + "query": "row var = to_boolean(true)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField)", + "query": "row to_boolean(true)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField))", + "query": "row var = to_bool(true)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField))", + "query": "row var = to_boolean(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", + "query": "row var = to_boolean(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField)) + max(numberField)", + "query": "row to_boolean(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField / 2)", + "query": "row var = to_bool(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField / 2)", + "query": "row var = to_boolean(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField / 2)", + "query": "row var = to_boolean(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", + "query": "row to_boolean(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField)", + "query": "row var = to_bool(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField)", + "query": "row var = to_boolean(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField)", + "query": "row var = to_boolean(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField) by round(numberField / 2)", + "query": "row to_boolean(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", + "query": "row var = to_bool(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", + "query": "row var = to_boolean(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", - "error": [], + "query": "row var = to_boolean(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = to_boolean(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval to_boolean(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_bool(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_boolean(to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(stringField)", + "query": "from a_index | eval to_boolean(cartesianPointField)", "error": [ - "Argument of [max] must be [number], found value [stringField] type [string]" + "Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | stats var = max(*)", + "query": "from a_index | eval var = to_boolean(*)", "error": [ - "Using wildcards (*) in max is not allowed" + "Using wildcards (*) in to_boolean is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = max(dateField)", + "query": "from a_index | eval var = to_boolean(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(dateField)", + "query": "from a_index | eval to_boolean(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(dateField))", + "query": "from a_index | eval var = to_bool(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(dateField))", + "query": "from a_index | eval var = to_boolean(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(dateField)) + max(dateField)", + "query": "from a_index | eval var = to_boolean(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(dateField)) + max(dateField)", + "query": "from a_index | eval to_boolean(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort max(numberField)", - "error": [ - "SORT does not support function max" - ], + "query": "from a_index | eval var = to_bool(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | where max(numberField)", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval var = to_boolean(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where max(numberField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval var = to_boolean(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where max(dateField)", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval to_boolean(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where max(dateField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval var = to_bool(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(numberField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_boolean(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(numberField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_boolean(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(numberField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(numberField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(dateField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(dateField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval to_boolean(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(dateField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_bool(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(dateField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_boolean(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(booleanField)", + "query": "from a_index | eval to_boolean(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(null)", + "query": "from a_index | eval var = to_bool(textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats max(nullVar)", + "query": "from a_index | eval var = to_boolean(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(\"2022\")", + "query": "from a_index | eval to_boolean(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(concat(\"20\", \"22\"))", - "error": [ - "Argument of [max] must be [number], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval var = to_bool(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(cartesianPointField)", + "query": "from a_index | eval to_boolean(booleanField, extraArg)", "error": [ - "Argument of [max] must be [number], found value [cartesianPointField] type [cartesian_point]" + "Error: [to_boolean] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats var = max(booleanField)", + "query": "from a_index | sort to_boolean(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | where max(booleanField)", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval to_boolean(null)", + "error": [], "warning": [] }, { - "query": "from a_index | where max(booleanField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "row nullVar = null | eval to_boolean(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(booleanField)", + "query": "row var = to_cartesianpoint(cartesianPointField)", "error": [ - "EVAL does not support function max" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = max(booleanField) > 0", + "query": "row to_cartesianpoint(cartesianPointField)", "error": [ - "EVAL does not support function max" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval max(booleanField)", + "query": "row var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", "error": [ - "EVAL does not support function max" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval max(booleanField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "row var = to_cartesianpoint(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(ipField)", + "query": "row to_cartesianpoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats max(ipField)", + "query": "row var = to_cartesianpoint(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where max(ipField)", + "query": "row var = to_cartesianpoint(true)", "error": [ - "WHERE does not support function max" + "Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where max(ipField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval var = to_cartesianpoint(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(ipField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval to_cartesianpoint(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(ipField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(ipField)", + "query": "from a_index | eval to_cartesianpoint(booleanField)", "error": [ - "EVAL does not support function max" + "Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval max(ipField) > 0", + "query": "from a_index | eval var = to_cartesianpoint(*)", "error": [ - "EVAL does not support function max" + "Using wildcards (*) in to_cartesianpoint is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = min(numberField)", + "query": "from a_index | eval var = to_cartesianpoint(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField)", + "query": "from a_index | eval to_cartesianpoint(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField))", + "query": "from a_index | eval var = to_cartesianpoint(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField))", + "query": "from a_index | eval var = to_cartesianpoint(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", + "query": "from a_index | eval to_cartesianpoint(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField)) + min(numberField)", - "error": [], + "query": "from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)", + "error": [ + "Error: [to_cartesianpoint] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | stats min(numberField / 2)", + "query": "from a_index | sort to_cartesianpoint(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField / 2)", + "query": "from a_index | eval to_cartesianpoint(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField / 2)", + "query": "row nullVar = null | eval to_cartesianpoint(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", - "error": [], + "query": "row var = to_cartesianshape(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField)", - "error": [], + "query": "row to_cartesianshape(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField)", - "error": [], + "query": "row var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField)", + "query": "row var = to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField) by round(numberField / 2)", + "query": "row to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", - "error": [], + "query": "row var = to_cartesianshape(to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", + "query": "row var = to_cartesianshape(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", + "query": "row to_cartesianshape(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2", + "query": "row var = to_cartesianshape(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row var = to_cartesianshape(true)", + "error": [ + "Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | 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]" - ], + "query": "from a_index | eval to_cartesianshape(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(stringField)", + "query": "from a_index | eval to_cartesianshape(booleanField)", "error": [ - "Argument of [min] must be [number], found value [stringField] type [string]" + "Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = min(*)", + "query": "from a_index | eval var = to_cartesianshape(*)", "error": [ - "Using wildcards (*) in min is not allowed" + "Using wildcards (*) in to_cartesianshape is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = min(dateField)", + "query": "from a_index | eval var = to_cartesianshape(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(dateField)", + "query": "from a_index | eval to_cartesianshape(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(dateField))", + "query": "from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(dateField))", + "query": "from a_index | eval var = to_cartesianshape(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(dateField)) + min(dateField)", + "query": "from a_index | eval to_cartesianshape(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(dateField)) + min(dateField)", + "query": "from a_index | eval var = to_cartesianshape(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | sort min(numberField)", - "error": [ - "SORT does not support function min" - ], + "query": "from a_index | eval var = to_cartesianshape(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | where min(numberField)", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval to_cartesianshape(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | where min(numberField) > 0", + "query": "from a_index | eval to_cartesianshape(cartesianPointField, extraArg)", "error": [ - "WHERE does not support function min" + "Error: [to_cartesianshape] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where min(dateField)", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | sort to_cartesianshape(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | where min(dateField) > 0", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval to_cartesianshape(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(numberField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row nullVar = null | eval to_cartesianshape(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(numberField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_datetime(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(numberField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row to_datetime(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(numberField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_dt(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(dateField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_datetime(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(dateField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_datetime(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(dateField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row to_datetime(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(dateField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_dt(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(booleanField)", + "query": "row var = to_datetime(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats min(null)", + "query": "row var = to_datetime(5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats min(nullVar)", + "query": "row to_datetime(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(\"2022\")", + "query": "row var = to_dt(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(concat(\"20\", \"22\"))", - "error": [ - "Argument of [min] must be [number], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "row var = to_datetime(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(cartesianPointField)", - "error": [ - "Argument of [min] must be [number], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "row var = to_datetime(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = min(booleanField)", + "query": "row to_datetime(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | where min(booleanField)", - "error": [ - "WHERE does not support function min" - ], + "query": "row var = to_dt(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where min(booleanField) > 0", - "error": [ - "WHERE does not support function min" - ], + "query": "row var = to_datetime(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(booleanField)", + "query": "row var = to_datetime(true)", "error": [ - "EVAL does not support function min" + "Argument of [to_datetime] must be [date], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = min(booleanField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(booleanField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(booleanField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = min(ipField)", + "query": "from a_index | eval var = to_datetime(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(ipField)", + "query": "from a_index | eval to_datetime(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | where min(ipField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(ipField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(ipField)", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = to_dt(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(ipField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = to_datetime(to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(ipField)", + "query": "from a_index | eval to_datetime(booleanField)", "error": [ - "EVAL does not support function min" + "Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval min(ipField) > 0", + "query": "from a_index | eval var = to_datetime(*)", "error": [ - "EVAL does not support function min" + "Using wildcards (*) in to_datetime is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = count(stringField)", + "query": "from a_index | eval var = to_datetime(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count(stringField)", + "query": "from a_index | eval to_datetime(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField))", + "query": "from a_index | eval var = to_dt(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField))", + "query": "from a_index | eval var = to_datetime(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField)) + count(stringField)", + "query": "from a_index | eval var = to_datetime(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField)) + count(stringField)", + "query": "from a_index | eval to_datetime(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort count(stringField)", - "error": [ - "SORT does not support function count" - ], + "query": "from a_index | eval var = to_dt(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | where count(stringField)", - "error": [ - "WHERE does not support function count" - ], + "query": "from a_index | eval var = to_datetime(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where count(stringField) > 0", - "error": [ - "WHERE does not support function count" - ], + "query": "from a_index | eval var = to_datetime(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count(stringField)", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval to_datetime(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count(stringField) > 0", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval var = to_dt(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval count(stringField)", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval var = to_datetime(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval count(stringField) > 0", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval var = to_datetime(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats count(null)", + "query": "from a_index | eval to_datetime(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats count(nullVar)", + "query": "from a_index | eval var = to_dt(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = count_distinct(stringField, numberField)", + "query": "from a_index | eval var = to_datetime(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count_distinct(stringField, numberField)", + "query": "from a_index | eval to_datetime(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField))", + "query": "from a_index | eval var = to_dt(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField))", + "query": "from a_index | eval var = to_datetime(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "query": "from a_index | eval to_datetime(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "query": "from a_index | eval var = to_dt(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | sort count_distinct(stringField, numberField)", + "query": "from a_index | eval to_datetime(dateField, extraArg)", "error": [ - "SORT does not support function count_distinct" + "Error: [to_datetime] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where count_distinct(stringField, numberField)", - "error": [ - "WHERE does not support function count_distinct" - ], + "query": "from a_index | sort to_datetime(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | where count_distinct(stringField, numberField) > 0", - "error": [ - "WHERE does not support function count_distinct" - ], + "query": "from a_index | eval to_datetime(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count_distinct(stringField, numberField)", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "row nullVar = null | eval to_datetime(nullVar)", + "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 to_datetime(\"2022\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval count_distinct(stringField, numberField)", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | eval to_datetime(concat(\"20\", \"22\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval count_distinct(stringField, numberField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "row var = to_degrees(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats count_distinct(null, null)", + "query": "row to_degrees(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats count_distinct(nullVar, nullVar)", + "query": "row var = to_degrees(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", + "query": "row var = to_degrees(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(cartesianPointField)", + "query": "row to_degrees(5)", "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]" - ], + "query": "row var = to_degrees(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(avg(numberField))", + "query": "row var = to_degrees(true)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [to_degrees] must be [double], found value [true] type [boolean]" ], "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 | where to_degrees(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(*)", + "query": "from a_index | where to_degrees(booleanField) > 0", "error": [ - "Using wildcards (*) in st_centroid_agg is not allowed" + "Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(geoPointField)", + "query": "from a_index | where to_degrees(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(geoPointField)", + "query": "from a_index | where to_degrees(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort st_centroid_agg(cartesianPointField)", - "error": [ - "SORT does not support function st_centroid_agg" - ], + "query": "from a_index | where to_degrees(unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(cartesianPointField)", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | eval to_degrees(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(geoPointField)", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(geoPointField) > 0", + "query": "from a_index | eval to_degrees(booleanField)", "error": [ - "WHERE does not support function st_centroid_agg" + "Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval var = to_degrees(*)", "error": [ - "EVAL does not support function st_centroid_agg" + "Using wildcards (*) in to_degrees is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval to_degrees(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(geoPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(longField)", + "error": [], "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 | eval to_degrees(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval to_degrees(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(booleanField)", + "query": "from a_index | eval to_degrees(doubleField, extraArg)", "error": [ - "Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]" + "Error: [to_degrees] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(null)", + "query": "from a_index | sort to_degrees(doubleField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats st_centroid_agg(nullVar)", + "query": "from a_index | eval to_degrees(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = values(stringField)", + "query": "row nullVar = null | eval to_degrees(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats values(stringField)", + "query": "row var = to_double(true)", "error": [], "warning": [] }, { - "query": "from a_index | sort values(stringField)", - "error": [ - "SORT does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | where values(stringField)", - "error": [ - "WHERE does not support function values" - ], + "query": "row to_double(true)", + "error": [], "warning": [] }, { - "query": "from a_index | where values(stringField) > 0", - "error": [ - "WHERE does not support function values" - ], + "query": "row var = to_dbl(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = values(stringField)", - "error": [ - "EVAL does not support function values" - ], + "query": "row var = to_double(to_boolean(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = values(stringField) > 0", - "error": [ - "EVAL does not support function values" - ], + "query": "row var = to_double(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval values(stringField)", - "error": [ - "EVAL does not support function values" - ], + "query": "row to_double(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval values(stringField) > 0", - "error": [ - "EVAL does not support function values" - ], + "query": "row var = to_dbl(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats values(null)", + "query": "row var = to_double(5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats values(nullVar)", + "query": "row to_double(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 1 year)", + "query": "row var = to_dbl(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 1 year)", + "query": "row var = to_double(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5)", + "query": "row to_double(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, numberField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]" - ], + "query": "row var = to_dbl(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5)", + "query": "row var = to_double(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", \"a\")", + "query": "row var = to_double(to_double(true))", "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]" - ], + "query": "row var = to_double(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, \"a\", \"a\")", + "query": "row var = to_double(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, now(), now())", + "query": "row to_double(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, dateField, dateField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [dateField]", - "Argument of [bucket] must be a constant, received [dateField]" - ], + "query": "row var = to_dbl(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), now())", + "query": "row var = to_double(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", now())", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, numberField, stringField, dateField)", + "query": "row var = to_double(to_cartesianpoint(\"POINT (30 10)\"))", "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [stringField]", - "Argument of [bucket] must be a constant, received [dateField]" + "Argument of [to_double] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, \"a\", now())", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, 5, now(), \"a\")", + "query": "from a_index | where to_double(booleanField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, dateField, stringField)", + "query": "from a_index | where to_double(cartesianPointField) > 0", "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]" + "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), \"a\")", + "query": "from a_index | where to_double(counterDoubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5, 5, 5)", + "query": "from a_index | where to_double(counterIntegerField) > 0", "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 | where to_double(counterLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5, 5, 5)", + "query": "from a_index | where to_double(dateField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort bucket(dateField, 1 year)", - "error": [ - "SORT does not support function bucket" - ], + "query": "from a_index | where to_double(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(null, null, null, null)", + "query": "from a_index | where to_double(integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)", - "error": [ - "Argument of [bucket] must be a constant, received [nullVar]", - "Argument of [bucket] must be a constant, received [nullVar]", - "Argument of [bucket] must be a constant, received [nullVar]" - ], + "query": "from a_index | where to_double(keywordField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 1 year)", + "query": "from a_index | where to_double(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 1 year)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | where to_double(textField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(concat(\"20\", \"22\"), 1 year)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | where to_double(unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"a\", \"a\")", + "query": "from a_index | eval var = to_double(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, \"a\", \"a\")", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval to_double(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"2022\", \"2022\")", + "query": "from a_index | eval var = to_dbl(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval var = to_double(to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"a\", \"2022\")", - "error": [], + "query": "from a_index | eval to_double(cartesianPointField)", + "error": [ + "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, \"a\", concat(\"20\", \"22\"))", + "query": "from a_index | eval var = to_double(*)", "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Using wildcards (*) in to_double is not allowed" ], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"2022\", \"a\")", + "query": "from a_index | eval var = to_double(counterDoubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, concat(\"20\", \"22\"), \"a\")", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval to_double(counterDoubleField)", + "error": [], "warning": [] }, { - "query": "row var = cbrt(5)", + "query": "from a_index | eval var = to_dbl(counterDoubleField)", "error": [], "warning": [] }, { - "query": "row cbrt(5)", + "query": "from a_index | eval var = to_double(counterIntegerField)", "error": [], "warning": [] }, { - "query": "row var = cbrt(to_integer(true))", + "query": "from a_index | eval to_double(counterIntegerField)", "error": [], "warning": [] }, { - "query": "row var = cbrt(true)", - "error": [ - "Argument of [cbrt] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = to_dbl(counterIntegerField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cbrt(numberField) > 0", + "query": "from a_index | eval var = to_double(counterLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where cbrt(booleanField) > 0", - "error": [ - "Argument of [cbrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval to_double(counterLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cbrt(numberField)", + "query": "from a_index | eval var = to_dbl(counterLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(numberField)", + "query": "from a_index | eval var = to_double(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cbrt(to_integer(booleanField))", + "query": "from a_index | eval to_double(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(booleanField)", - "error": [ - "Argument of [cbrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = to_dbl(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cbrt(*)", - "error": [ - "Using wildcards (*) in cbrt is not allowed" - ], + "query": "from a_index | eval var = to_double(to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(numberField, extraArg)", - "error": [ - "Error: [cbrt] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = to_double(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort cbrt(numberField)", + "query": "from a_index | eval to_double(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(null)", + "query": "from a_index | eval var = to_dbl(doubleField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval cbrt(nullVar)", + "query": "from a_index | eval var = to_double(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = from_base64(\"a\")", + "query": "from a_index | eval var = to_double(integerField)", "error": [], "warning": [] }, { - "query": "row from_base64(\"a\")", + "query": "from a_index | eval to_double(integerField)", "error": [], "warning": [] }, { - "query": "row var = from_base64(to_string(true))", + "query": "from a_index | eval var = to_dbl(integerField)", "error": [], "warning": [] }, { - "query": "row var = from_base64(true)", - "error": [ - "Argument of [from_base64] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = to_double(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(from_base64(stringField)) > 0", + "query": "from a_index | eval var = to_double(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(from_base64(booleanField)) > 0", - "error": [ - "Argument of [from_base64] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval to_double(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = from_base64(stringField)", + "query": "from a_index | eval var = to_dbl(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval from_base64(stringField)", + "query": "from a_index | eval var = to_double(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = from_base64(to_string(booleanField))", + "query": "from a_index | eval var = to_double(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval from_base64(booleanField)", - "error": [ - "Argument of [from_base64] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval to_double(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = from_base64(*)", - "error": [ - "Using wildcards (*) in from_base64 is not allowed" - ], + "query": "from a_index | eval var = to_dbl(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval from_base64(stringField, extraArg)", - "error": [ - "Error: [from_base64] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = to_double(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort from_base64(stringField)", + "query": "from a_index | eval to_double(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval from_base64(null)", + "query": "from a_index | eval var = to_dbl(textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval from_base64(nullVar)", + "query": "from a_index | eval var = to_double(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = locate(\"a\", \"a\")", + "query": "from a_index | eval to_double(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row locate(\"a\", \"a\")", + "query": "from a_index | eval var = to_dbl(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = locate(to_string(true), to_string(true))", - "error": [], + "query": "from a_index | eval to_double(booleanField, extraArg)", + "error": [ + "Error: [to_double] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = locate(\"a\", \"a\", 5)", + "query": "from a_index | sort to_double(booleanField)", "error": [], "warning": [] }, { - "query": "row locate(\"a\", \"a\", 5)", + "query": "from a_index | eval to_double(null)", "error": [], "warning": [] }, { - "query": "row var = locate(to_string(true), to_string(true), to_integer(true))", + "query": "row nullVar = null | eval to_double(nullVar)", "error": [], "warning": [] }, { - "query": "row var = locate(true, true, true)", - "error": [ - "Argument of [locate] must be [string], found value [true] type [boolean]", - "Argument of [locate] must be [string], found value [true] type [boolean]", - "Argument of [locate] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval to_double(\"2022\")", + "error": [], "warning": [] }, { - "query": "from a_index | where locate(stringField, stringField) > 0", + "query": "from a_index | eval to_double(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | where locate(booleanField, booleanField) > 0", + "query": "row var = to_geopoint(geoPointField)", "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where locate(stringField, stringField, numberField) > 0", - "error": [], + "query": "row to_geopoint(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | where locate(booleanField, booleanField, booleanField) > 0", + "query": "row var = to_geopoint(to_geopoint(geoPointField))", "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [number], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = locate(stringField, stringField)", + "query": "row var = to_geopoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(stringField, stringField)", + "query": "row to_geopoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))", + "query": "row var = to_geopoint(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(booleanField, booleanField)", + "query": "row var = to_geopoint(true)", "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]" + "Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = locate(stringField, stringField, numberField)", + "query": "from a_index | eval var = to_geopoint(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(stringField, stringField, numberField)", + "query": "from a_index | eval to_geopoint(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = to_geopoint(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(booleanField, booleanField, booleanField)", + "query": "from a_index | eval to_geopoint(booleanField)", "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [number], found value [booleanField] type [boolean]" + "Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval locate(stringField, stringField, numberField, extraArg)", + "query": "from a_index | eval var = to_geopoint(*)", "error": [ - "Error: [locate] function expects no more than 3 arguments, got 4." + "Using wildcards (*) in to_geopoint is not allowed" ], "warning": [] }, { - "query": "from a_index | sort locate(stringField, stringField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval locate(nullVar, nullVar, nullVar)", + "query": "from a_index | eval var = to_geopoint(keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_base64(\"a\")", + "query": "from a_index | eval to_geopoint(keywordField)", "error": [], "warning": [] }, { - "query": "row to_base64(\"a\")", + "query": "from a_index | eval var = to_geopoint(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_base64(to_string(true))", + "query": "from a_index | eval var = to_geopoint(textField)", "error": [], "warning": [] }, { - "query": "row var = to_base64(true)", - "error": [ - "Argument of [to_base64] must be [string], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(to_base64(stringField)) > 0", + "query": "from a_index | eval to_geopoint(textField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_base64(booleanField)) > 0", + "query": "from a_index | eval to_geopoint(geoPointField, extraArg)", "error": [ - "Argument of [to_base64] must be [string], found value [booleanField] type [boolean]" + "Error: [to_geopoint] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = to_base64(stringField)", + "query": "from a_index | sort to_geopoint(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_base64(stringField)", + "query": "from a_index | eval to_geopoint(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_base64(to_string(booleanField))", + "query": "row nullVar = null | eval to_geopoint(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_base64(booleanField)", + "query": "row var = to_geoshape(geoPointField)", "error": [ - "Argument of [to_base64] must be [string], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_base64(*)", + "query": "row to_geoshape(geoPointField)", "error": [ - "Using wildcards (*) in to_base64 is not allowed" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval to_base64(stringField, extraArg)", + "query": "row var = to_geoshape(to_geopoint(geoPointField))", "error": [ - "Error: [to_base64] function expects exactly one argument, got 2." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort to_base64(stringField)", + "query": "row var = to_geoshape(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_base64(null)", + "query": "row to_geoshape(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_base64(nullVar)", - "error": [], + "query": "row var = to_geoshape(to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "row var = to_geoshape(\"a\")", "error": [], "warning": [] }, { - "query": "row ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "row to_geoshape(\"a\")", "error": [], "warning": [] }, { - "query": "row var = ip_prefix(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", + "query": "row var = to_geoshape(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = ip_prefix(true, true, true)", + "query": "row var = to_geoshape(true)", "error": [ - "Argument of [ip_prefix] must be [ip], found value [true] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [true] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [true] type [boolean]" + "Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = ip_prefix(ipField, numberField, numberField)", + "query": "from a_index | eval var = to_geoshape(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval ip_prefix(ipField, numberField, numberField)", + "query": "from a_index | eval to_geoshape(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = to_geoshape(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval ip_prefix(booleanField, booleanField, booleanField)", + "query": "from a_index | eval to_geoshape(booleanField)", "error": [ - "Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]" + "Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval ip_prefix(ipField, numberField, numberField, extraArg)", + "query": "from a_index | eval var = to_geoshape(*)", "error": [ - "Error: [ip_prefix] function expects exactly 3 arguments, got 4." + "Using wildcards (*) in to_geoshape is not allowed" ], "warning": [] }, { - "query": "from a_index | sort ip_prefix(ipField, numberField, numberField)", + "query": "from a_index | eval var = to_geoshape(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval ip_prefix(null, null, null)", + "query": "from a_index | eval to_geoshape(geoShapeField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)", + "query": "from a_index | eval var = to_geoshape(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = mv_append(true, true)", + "query": "from a_index | eval var = to_geoshape(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_append(true, true)", + "query": "from a_index | eval to_geoshape(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_boolean(true), to_boolean(true))", + "query": "from a_index | eval var = to_geoshape(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = to_geoshape(textField)", "error": [], "warning": [] }, { - "query": "row mv_append(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval to_geoshape(textField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | eval to_geoshape(geoPointField, extraArg)", + "error": [ + "Error: [to_geoshape] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | sort to_geoshape(geoPointField)", "error": [], "warning": [] }, { - "query": "row mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval to_geoshape(null)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row nullVar = null | eval to_geoshape(nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_append(now(), now())", + "query": "row var = to_integer(true)", "error": [], "warning": [] }, { - "query": "row mv_append(now(), now())", + "query": "row to_integer(true)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_datetime(now()), to_datetime(now()))", + "query": "row var = to_int(true)", "error": [], "warning": [] }, { - "query": "row var = mv_append(5, 5)", + "query": "row var = to_integer(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row mv_append(5, 5)", + "query": "row var = to_integer(5)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_integer(true), to_integer(true))", + "query": "row to_integer(5)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "row var = to_int(5)", "error": [], "warning": [] }, { - "query": "row mv_append(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "row var = to_integer(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row to_integer(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = to_int(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = to_integer(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = to_integer(5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "row to_integer(5.5)", "error": [], "warning": [] }, { - "query": "row mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "row var = to_int(5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "query": "row var = to_integer(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_append(\"a\", \"a\")", + "query": "row var = to_integer(to_integer(true))", "error": [], "warning": [] }, { - "query": "row mv_append(\"a\", \"a\")", + "query": "row var = to_integer(\"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_string(true), to_string(true))", + "query": "row to_integer(\"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "row var = to_int(\"a\")", "error": [], "warning": [] }, { - "query": "row mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "row var = to_integer(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_version(\"a\"), to_version(\"a\"))", + "query": "row var = to_integer(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_integer] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_integer(booleanField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where mv_append(numberField, numberField) > 0", + "query": "from a_index | where to_integer(cartesianPointField) > 0", + "error": [ + "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_integer(counterIntegerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_append(stringField, stringField)) > 0", + "query": "from a_index | where to_integer(dateField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(booleanField, booleanField)", + "query": "from a_index | where to_integer(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(booleanField, booleanField)", + "query": "from a_index | where to_integer(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))", + "query": "from a_index | where to_integer(keywordField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)", + "query": "from a_index | where to_integer(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(cartesianPointField, cartesianPointField)", + "query": "from a_index | where to_integer(textField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | where to_integer(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval var = to_integer(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval to_integer(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = to_int(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(dateField, dateField)", + "query": "from a_index | eval var = to_integer(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(dateField, dateField)", + "query": "from a_index | eval to_integer(cartesianPointField)", + "error": [ + "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(*)", + "error": [ + "Using wildcards (*) in to_integer is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(counterIntegerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))", + "query": "from a_index | eval to_integer(counterIntegerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(numberField, numberField)", + "query": "from a_index | eval var = to_int(counterIntegerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(numberField, numberField)", + "query": "from a_index | eval var = to_integer(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval to_integer(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(geoPointField, geoPointField)", + "query": "from a_index | eval var = to_int(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(geoPointField, geoPointField)", + "query": "from a_index | eval var = to_integer(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = to_integer(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(geoShapeField, geoShapeField)", + "query": "from a_index | eval to_integer(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(geoShapeField, geoShapeField)", + "query": "from a_index | eval var = to_int(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval var = to_integer(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(ipField, ipField)", + "query": "from a_index | eval var = to_integer(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(ipField, ipField)", + "query": "from a_index | eval to_integer(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))", + "query": "from a_index | eval var = to_int(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(stringField, stringField)", + "query": "from a_index | eval var = to_integer(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(stringField, stringField)", + "query": "from a_index | eval var = to_integer(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval to_integer(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(versionField, versionField)", + "query": "from a_index | eval var = to_int(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(versionField, versionField)", + "query": "from a_index | eval var = to_integer(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_version(stringField), to_version(stringField))", + "query": "from a_index | eval var = to_integer(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(booleanField, booleanField, extraArg)", + "query": "from a_index | eval to_integer(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_int(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_int(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_int(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(booleanField, extraArg)", "error": [ - "Error: [mv_append] function expects exactly 2 arguments, got 3." + "Error: [to_integer] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_integer(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_integer(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(concat(\"20\", \"22\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(to_ip(\"127.0.0.1\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_ip(to_ip(\"127.0.0.1\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_ip(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(true)", + "error": [ + "Argument of [to_ip] must be [ip], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(to_ip(ipField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(booleanField)", + "error": [ + "Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(*)", + "error": [ + "Using wildcards (*) in to_ip is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(ipField, extraArg)", + "error": [ + "Error: [to_ip] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_ip(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_ip(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row to_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_long(booleanField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(cartesianPointField) > 0", + "error": [ + "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_long(counterIntegerField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(counterLongField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(dateField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(doubleField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(integerField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(keywordField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(longField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(textField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(unsignedLongField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(cartesianPointField)", + "error": [ + "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(*)", + "error": [ + "Using wildcards (*) in to_long is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_double(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(booleanField, extraArg)", + "error": [ + "Error: [to_long] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_long(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(concat(\"20\", \"22\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_lower(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(true)", + "error": [ + "Argument of [to_lower] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(booleanField)", + "error": [ + "Argument of [to_lower] must be [keyword], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(*)", + "error": [ + "Using wildcards (*) in to_lower is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(keywordField, extraArg)", + "error": [ + "Error: [to_lower] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_lower(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_lower(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row to_radians(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_radians(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(true)", + "error": [ + "Argument of [to_radians] must be [double], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_radians(doubleField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_radians(booleanField) > 0", + "error": [ + "Argument of [to_radians] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_radians(integerField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_radians(longField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_radians(unsignedLongField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(to_double(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(booleanField)", + "error": [ + "Argument of [to_radians] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(*)", + "error": [ + "Using wildcards (*) in to_radians is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(doubleField, extraArg)", + "error": [ + "Error: [to_radians] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_radians(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_radians(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(booleanField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(booleanField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(cartesianPointField) > 0", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [>] must be [double], found value [to_unsigned_long(cartesianPointField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(dateField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(dateField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(doubleField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(doubleField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(integerField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(integerField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(keywordField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(keywordField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(longField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(longField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(textField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(textField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(unsignedLongField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(unsignedLongField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(cartesianPointField)", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(*)", + "error": [ + "Using wildcards (*) in to_unsigned_long is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_double(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(booleanField, extraArg)", + "error": [ + "Error: [to_unsigned_long] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_unsigned_long(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(concat(\"20\", \"22\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_upper(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(true)", + "error": [ + "Argument of [to_upper] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(booleanField)", + "error": [ + "Argument of [to_upper] must be [keyword], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(*)", + "error": [ + "Using wildcards (*) in to_upper is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(keywordField, extraArg)", + "error": [ + "Error: [to_upper] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_upper(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_upper(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_version(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ver(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_version(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ver(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(true)", + "error": [ + "Argument of [to_version] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(keywordField)", + "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 = to_version(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(keywordField, extraArg)", + "error": [ + "Error: [to_version] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_version(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_version(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row trim(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(true)", + "error": [ + "Argument of [trim] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(booleanField)", + "error": [ + "Argument of [trim] must be [keyword], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(*)", + "error": [ + "Using wildcards (*) in trim is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(keywordField, extraArg)", + "error": [ + "Error: [trim] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort trim(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval trim(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = case(true, \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row case(true, \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = case(to_cartesianpoint(\"POINT (30 10)\"), true)", + "error": [ + "Argument of [case] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = case(booleanField, textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval case(booleanField, textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort case(booleanField, textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval case(null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval case(nullVar, nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(integerField)) + avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(integerField)) + avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(booleanField)", + "error": [ + "Argument of [avg] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(*)", + "error": [ + "Using wildcards (*) in avg is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterIntegerField)) + avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterIntegerField)) + avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(doubleField)) + avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(doubleField)) + avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(unsignedLongField)) + avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(unsignedLongField)) + avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(longField)) + avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(longField)) + avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterLongField)) + avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterLongField)) + avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterDoubleField)) + avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterDoubleField)) + avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort avg(integerField)", + "error": [ + "SORT does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(integerField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(integerField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterIntegerField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterIntegerField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(doubleField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(doubleField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(unsignedLongField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(unsignedLongField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(longField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(longField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterLongField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterLongField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterDoubleField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterDoubleField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(integerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(integerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(integerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(integerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterIntegerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterIntegerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterIntegerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterIntegerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(doubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(doubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(doubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(doubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(unsignedLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(unsignedLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(unsignedLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(unsignedLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(longField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(longField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(longField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(longField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterDoubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterDoubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterDoubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterDoubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats avg(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(integerField)) + sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(integerField)) + sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(booleanField)", + "error": [ + "Argument of [sum] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(*)", + "error": [ + "Using wildcards (*) in sum is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterIntegerField)) + sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterIntegerField)) + sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(doubleField)) + sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(doubleField)) + sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(unsignedLongField)) + sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(unsignedLongField)) + sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(longField)) + sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(longField)) + sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterLongField)) + sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterLongField)) + sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterDoubleField)) + sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterDoubleField)) + sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort sum(integerField)", + "error": [ + "SORT does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(integerField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(integerField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterIntegerField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterIntegerField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(doubleField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(doubleField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(unsignedLongField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(unsignedLongField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(longField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(longField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterLongField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterLongField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterDoubleField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterDoubleField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(integerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(integerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(integerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(integerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterIntegerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterIntegerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterIntegerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterIntegerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(doubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(doubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(doubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(doubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(unsignedLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(unsignedLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(unsignedLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(unsignedLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(longField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(longField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(longField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(longField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterDoubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterDoubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterDoubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterDoubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats sum(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(integerField)) + median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(integerField)) + median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(booleanField)", + "error": [ + "Argument of [median] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median(*)", + "error": [ + "Using wildcards (*) in median is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterIntegerField)) + median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterIntegerField)) + median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(doubleField)) + median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(doubleField)) + median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(unsignedLongField)) + median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(unsignedLongField)) + median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(longField)) + median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(longField)) + median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterLongField)) + median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterLongField)) + median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterDoubleField)) + median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterDoubleField)) + median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort median(integerField)", + "error": [ + "SORT does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(integerField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(integerField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterIntegerField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterIntegerField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(doubleField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(doubleField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(unsignedLongField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(unsignedLongField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(longField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(longField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterLongField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterLongField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterDoubleField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterDoubleField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(integerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(integerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(integerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(integerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterIntegerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterIntegerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(doubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(doubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(doubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(doubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(unsignedLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(unsignedLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(longField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(longField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(longField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(longField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterDoubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterDoubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats median(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(booleanField)", + "error": [ + "Argument of [median_absolute_deviation] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(*)", + "error": [ + "Using wildcards (*) in median_absolute_deviation is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort median_absolute_deviation(integerField)", + "error": [ + "SORT does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(integerField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(integerField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterIntegerField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterIntegerField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(doubleField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(doubleField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(unsignedLongField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(unsignedLongField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(longField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(longField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterLongField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterLongField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterDoubleField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterDoubleField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(integerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(integerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(integerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(integerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterIntegerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterIntegerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(doubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(doubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(doubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(doubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(unsignedLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(unsignedLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(longField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(longField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(longField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(longField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterDoubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterDoubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats median_absolute_deviation(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(doubleField)) + max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(doubleField)) + max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(cartesianPointField)", + "error": [ + "Argument of [max] must be [double], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(*)", + "error": [ + "Using wildcards (*) in max is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(longField)) + max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(longField)) + max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(integerField)) + max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(integerField)) + max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "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 = max(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort max(doubleField)", + "error": [ + "SORT does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(doubleField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(doubleField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(longField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(longField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(integerField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(integerField) > 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 | where max(datePeriodField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(datePeriodField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(booleanField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(booleanField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(ipField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(ipField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(doubleField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(doubleField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(doubleField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(doubleField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(longField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(longField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(longField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(longField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(integerField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(integerField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(integerField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(integerField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(dateField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(dateField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(datePeriodField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(datePeriodField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(datePeriodField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(datePeriodField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(booleanField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(booleanField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(booleanField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(booleanField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(ipField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(ipField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(ipField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(ipField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats max(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(concat(\"20\", \"22\"))", + "error": [ + "Argument of [max] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(doubleField)) + min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(doubleField)) + min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(cartesianPointField)", + "error": [ + "Argument of [min] must be [double], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(*)", + "error": [ + "Using wildcards (*) in min is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(longField)) + min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(longField)) + min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(integerField)) + min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(integerField)) + min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "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 = min(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort min(doubleField)", + "error": [ + "SORT does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(doubleField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(doubleField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(longField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(longField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(integerField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(integerField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(datePeriodField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(datePeriodField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(booleanField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(booleanField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(ipField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(ipField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(doubleField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(doubleField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(doubleField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(doubleField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(longField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(longField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(longField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(longField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(integerField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(integerField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(integerField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(integerField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(datePeriodField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(datePeriodField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(datePeriodField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(datePeriodField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(booleanField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(booleanField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(booleanField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(booleanField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(ipField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(ipField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(ipField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(ipField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats min(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(concat(\"20\", \"22\"))", + "error": [ + "Argument of [min] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count(textField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count(textField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count(textField)) + count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count(textField)) + count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort count(textField)", + "error": [ + "SORT does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | where count(textField)", + "error": [ + "WHERE does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | where count(textField) > 0", + "error": [ + "WHERE does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count(textField)", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count(textField) > 0", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval count(textField)", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval count(textField) > 0", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | stats count(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats count(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats count_distinct(null, null, null, null, null, null, null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats count_distinct(nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(booleanField)", + "error": [ + "Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(*)", + "error": [ + "Using wildcards (*) in st_centroid_agg is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_centroid_agg(cartesianPointField)", + "error": [ + "SORT does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(cartesianPointField)", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(geoPointField)", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(geoPointField) > 0", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(cartesianPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(geoPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(geoPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(geoPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats st_centroid_agg(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = values(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats values(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort values(textField)", + "error": [ + "SORT does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | where values(textField)", + "error": [ + "WHERE does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | where values(textField) > 0", + "error": [ + "WHERE does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = values(textField)", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = values(textField) > 0", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval values(textField)", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval values(textField) > 0", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | stats values(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats values(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = top(textField, integerField, textField)", + "error": [ + "Argument of [=] must be a constant, received [top(textField,integerField,textField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats top(textField, integerField, textField)", + "error": [ + "Argument of [top] must be a constant, received [integerField]", + "Argument of [top] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | sort top(textField, integerField, textField)", + "error": [ + "SORT does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, textField)", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, textField) > 0", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, textField)", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, textField) > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, textField)", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, textField) > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | stats top(null, null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats top(nullVar, nullVar, nullVar)", + "error": [ + "Argument of [top] must be a constant, received [nullVar]", + "Argument of [top] must be a constant, received [nullVar]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = top(textField, integerField, \"asc\")", + "error": [ + "Argument of [=] must be a constant, received [top(textField,integerField,\"asc\")]" + ], + "warning": [] + }, + { + "query": "from a_index | stats top(textField, integerField, \"asc\")", + "error": [ + "Argument of [top] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | sort top(textField, integerField, \"asc\")", + "error": [ + "SORT does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, \"asc\")", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, \"asc\") > 0", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, \"asc\")", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, \"asc\") > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, \"asc\")", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, \"asc\") > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(avg(integerField), avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(avg(integerField), avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(booleanField, booleanField)", + "error": [ + "Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]", + "Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | sort weighted_avg(doubleField, doubleField)", + "error": [ + "SORT does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, doubleField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, doubleField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats weighted_avg(nullVar, nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, longField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, longField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, integerField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, integerField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, doubleField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, doubleField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, longField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, longField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, integerField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, integerField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, doubleField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, doubleField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, longField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, longField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, integerField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, integerField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(integerField, integerField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(integerField, integerField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, textField, textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, textField, textField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [textField]", + "Argument of [bin] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, dateField, dateField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, dateField, dateField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [dateField]", + "Argument of [bin] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, textField, dateField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, textField, dateField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [textField]", + "Argument of [bin] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, dateField, textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, dateField, textField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [dateField]", + "Argument of [bin] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(integerField, integerField, integerField, integerField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(integerField, integerField, integerField, integerField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | sort bucket(dateField, 1 year)", + "error": [ + "SORT does not support function bucket" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(null, null, null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)", + "error": [ + "Argument of [bucket] must be a constant, received [nullVar]", + "Argument of [bucket] must be a constant, received [nullVar]", + "Argument of [bucket] must be a constant, received [nullVar]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 1 year)", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, textField, textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, textField, textField)", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, \"2022\", \"2022\")", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, textField, \"2022\")", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, textField, concat(\"20\", \"22\"))", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, \"2022\", textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, concat(\"20\", \"22\"), textField)", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, doubleField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, doubleField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))+percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(doubleField,doubleField))]", + "Argument of [+] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, doubleField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(avg(integerField), avg(integerField))", + "error": [ + "Argument of [=] must be a constant, received [percentile(avg(integerField),avg(integerField))]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(avg(integerField), avg(integerField))", + "error": [ + "Argument of [percentile] must be a constant, received [avg(integerField)]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(booleanField, )", + "error": [ + "SyntaxError: no viable alternative at input 'percentile(booleanField, )'", + "SyntaxError: mismatched input ')' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "At least one aggregation or grouping expression required in [STATS]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, longField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,longField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, longField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, longField)) + percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,longField))+percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, longField)) + percentile(doubleField, longField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(doubleField,longField))]", + "Argument of [+] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField / 2, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField / 2, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, longField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, integerField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, integerField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))+percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(doubleField,integerField))]", + "Argument of [+] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, integerField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, doubleField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,doubleField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, doubleField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, doubleField)) + percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,doubleField))+percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, doubleField)) + percentile(longField, doubleField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(longField,doubleField))]", + "Argument of [+] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, doubleField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, longField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,longField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, longField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, longField)) + percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,longField))+percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, longField)) + percentile(longField, longField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(longField,longField))]", + "Argument of [+] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, longField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, longField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, integerField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,integerField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, integerField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, integerField)) + percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,integerField))+percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, integerField)) + percentile(longField, integerField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(longField,integerField))]", + "Argument of [+] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, integerField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, integerField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, doubleField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, doubleField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))+percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(integerField,doubleField))]", + "Argument of [+] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, doubleField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, longField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,longField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, longField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, longField)) + percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,longField))+percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, longField)) + percentile(integerField, longField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(integerField,longField))]", + "Argument of [+] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, longField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, longField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, integerField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,integerField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, integerField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, integerField)) + percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,integerField))+percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, integerField)) + percentile(integerField, integerField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(integerField,integerField))]", + "Argument of [+] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, integerField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | sort percentile(doubleField, doubleField)", + "error": [ + "SORT does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, doubleField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, doubleField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, longField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, longField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, integerField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, integerField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, doubleField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, doubleField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, longField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, longField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, integerField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, integerField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, doubleField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, doubleField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, longField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, longField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, integerField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, integerField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort mv_append(booleanField, booleanField)", + "query": "from a_index | stats percentile(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(null, null)", - "error": [], + "query": "row nullVar = null | stats percentile(nullVar, nullVar)", + "error": [ + "Argument of [percentile] must be a constant, received [nullVar]" + ], "warning": [] }, { - "query": "row nullVar = null | eval mv_append(nullVar, nullVar)", + "query": "row var = to_string(true)", "error": [], "warning": [] }, { - "query": "row var = repeat(\"a\", 5)", + "query": "row to_string(true)", "error": [], "warning": [] }, { - "query": "row repeat(\"a\", 5)", + "query": "row var = to_str(true)", "error": [], "warning": [] }, { - "query": "row var = repeat(to_string(true), to_integer(true))", + "query": "row var = to_string(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = repeat(true, true)", + "query": "row var = to_string(cartesianPointField)", "error": [ - "Argument of [repeat] must be [string], found value [true] type [boolean]", - "Argument of [repeat] must be [number], found value [true] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where length(repeat(stringField, numberField)) > 0", - "error": [], + "query": "row to_string(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(repeat(booleanField, booleanField)) > 0", + "query": "row var = to_str(cartesianPointField)", "error": [ - "Argument of [repeat] must be [string], found value [booleanField] type [boolean]", - "Argument of [repeat] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = repeat(stringField, numberField)", - "error": [], + "query": "row var = to_string(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval repeat(stringField, numberField)", + "query": "row var = to_string(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))", + "query": "row to_string(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval repeat(booleanField, booleanField)", - "error": [ - "Argument of [repeat] must be [string], found value [booleanField] type [boolean]", - "Argument of [repeat] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = to_str(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval repeat(stringField, numberField, extraArg)", + "query": "row var = to_string(to_cartesianshape(cartesianPointField))", "error": [ - "Error: [repeat] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | sort repeat(stringField, numberField)", + "query": "row var = to_string(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval repeat(null, null)", + "query": "row to_string(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval repeat(nullVar, nullVar)", + "query": "row var = to_str(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 3, \"asc\")", + "query": "row var = to_string(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, 1, \"desc\")", + "query": "row var = to_string(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 5, \"asc\")", + "query": "row to_string(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, 5, \"asc\")", + "query": "row var = to_str(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 3)", - "error": [ - "Error: [top] function expects exactly 3 arguments, got 2." - ], + "query": "row var = to_string(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField)", + "query": "row var = to_string(geoPointField)", "error": [ - "Error: [top] function expects exactly 3 arguments, got 1." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, numberField, \"asc\")", + "query": "row to_string(geoPointField)", "error": [ - "Argument of [=] must be a constant, received [top(stringField,numberField,\"asc\")]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 100 + numberField, \"asc\")", + "query": "row var = to_str(geoPointField)", "error": [ - "Argument of [=] must be a constant, received [top(stringField,100+numberField,\"asc\")]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 1, stringField)", + "query": "row var = to_string(to_geopoint(geoPointField))", "error": [ - "Argument of [=] must be a constant, received [top(stringField,1,stringField)]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 1, \"asdf\")", + "query": "row var = to_string(to_geoshape(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Invalid option [\"asdf\"] for top. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "from a_index | sort top(stringField, numberField, \"asc\")", - "error": [ - "SORT does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | where top(stringField, numberField, \"asc\")", - "error": [ - "WHERE does not support function top" - ], "warning": [] }, { - "query": "from a_index | where top(stringField, numberField, \"asc\") > 0", - "error": [ - "WHERE does not support function top" - ], + "query": "row to_string(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, numberField, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_str(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, numberField, \"asc\") > 0", + "query": "row var = to_string(to_geoshape(geoPointField))", "error": [ - "EVAL does not support function top" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval top(stringField, numberField, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_string(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval top(stringField, numberField, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], + "query": "row to_string(5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort top(stringField, 5, \"asc\")", - "error": [ - "SORT does not support function top" - ], + "query": "row var = to_str(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where top(stringField, 5, \"asc\")", - "error": [ - "WHERE does not support function top" - ], + "query": "row var = to_string(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where top(stringField, 5, \"asc\") > 0", - "error": [ - "WHERE does not support function top" - ], + "query": "row var = to_string(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, 5, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row to_string(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, 5, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_str(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval top(stringField, 5, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_string(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval top(stringField, 5, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_string(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 5, \"asc\")", + "query": "row to_string(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, 5, \"asc\")", + "query": "row var = to_str(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, numberField, \"asc\")", - "error": [ - "Argument of [top] must be a constant, received [numberField]" - ], + "query": "row var = to_string(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats top(null, null, null)", + "query": "row var = to_string(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats top(nullVar, nullVar, nullVar)", - "error": [ - "Argument of [top] must be a constant, received [nullVar]", - "Argument of [top] must be a constant, received [nullVar]" - ], + "query": "row to_string(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "row var = st_distance(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = to_str(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row st_distance(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = to_string(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = st_distance(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = to_string(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_distance(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval to_string(booleanField)", "error": [], "warning": [] }, { - "query": "row st_distance(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = to_str(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_distance(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = to_string(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_distance(true, true)", + "query": "from a_index | eval to_string(counterDoubleField)", "error": [ - "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [to_string] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)", - "error": [], + "query": "from a_index | eval var = to_string(*)", + "error": [ + "Using wildcards (*) in to_string is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = to_string(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval to_string(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(booleanField, booleanField)", - "error": [ - "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_distance(geoPointField, geoPointField)", + "query": "from a_index | eval var = to_str(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(geoPointField, geoPointField)", + "query": "from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = to_string(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_distance] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval to_string(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_distance(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = to_str(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(null, null)", + "query": "from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_distance(nullVar, nullVar)", + "query": "from a_index | eval var = to_string(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = weighted_avg(numberField, numberField)", + "query": "from a_index | eval to_string(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_str(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(weighted_avg(numberField, numberField))", + "query": "from a_index | eval var = to_string(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(weighted_avg(numberField, numberField))", + "query": "from a_index | eval var = to_string(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)", + "query": "from a_index | eval to_string(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_str(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval var = to_string(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval var = to_string(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval to_string(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval var = to_str(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_string(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_string(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField)", + "query": "from a_index | eval to_string(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(numberField, numberField) by round(numberField / 2)", + "query": "from a_index | eval var = to_str(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = to_string(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), ipField", + "query": "from a_index | eval var = to_string(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval to_string(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = to_str(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = to_string(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = weighted_avg(avg(numberField), avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_string(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(avg(numberField), avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval to_string(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(booleanField, booleanField)", - "error": [ - "Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]", - "Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = to_str(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort weighted_avg(numberField, numberField)", - "error": [ - "SORT does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | where weighted_avg(numberField, numberField)", - "error": [ - "WHERE does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where weighted_avg(numberField, numberField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], + "query": "from a_index | eval to_string(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = weighted_avg(numberField, numberField)", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_str(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = weighted_avg(numberField, numberField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval weighted_avg(numberField, numberField)", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval weighted_avg(numberField, numberField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval to_string(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(null, null)", + "query": "from a_index | eval var = to_str(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats weighted_avg(nullVar, nullVar)", + "query": "from a_index | eval var = to_string(textField)", "error": [], "warning": [] }, { - "query": "row var = exp(5)", + "query": "from a_index | eval to_string(textField)", "error": [], "warning": [] }, { - "query": "row exp(5)", + "query": "from a_index | eval var = to_str(textField)", "error": [], "warning": [] }, { - "query": "row var = exp(to_integer(true))", + "query": "from a_index | eval var = to_string(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = exp(true)", - "error": [ - "Argument of [exp] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval to_string(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where exp(numberField) > 0", + "query": "from a_index | eval var = to_str(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where exp(booleanField) > 0", - "error": [ - "Argument of [exp] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = to_string(versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = exp(numberField)", + "query": "from a_index | eval to_string(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval exp(numberField)", + "query": "from a_index | eval var = to_str(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = exp(to_integer(booleanField))", + "query": "from a_index | eval var = to_string(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval exp(booleanField)", + "query": "from a_index | eval to_string(booleanField, extraArg)", "error": [ - "Argument of [exp] must be [number], found value [booleanField] type [boolean]" + "Error: [to_string] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = exp(*)", - "error": [ - "Using wildcards (*) in exp is not allowed" - ], + "query": "from a_index | sort to_string(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval exp(numberField, extraArg)", - "error": [ - "Error: [exp] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval to_string(null)", + "error": [], "warning": [] }, { - "query": "from a_index | sort exp(numberField)", + "query": "row nullVar = null | eval to_string(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval exp(null)", + "query": "from a_index | eval to_string(\"2022\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval exp(nullVar)", + "query": "from a_index | eval to_string(concat(\"20\", \"22\"))", "error": [], "warning": [] }, 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 daeff58923f5c..f4c75ae1e63a0 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -35,26 +35,38 @@ const NESTED_DEPTHS = Array(NESTING_LEVELS) .fill(0) .map((_, i) => i + 1); +const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; const toInteger = evalFunctionDefinitions.find(({ name }) => name === 'to_integer')!; +const toDoubleSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_double')!; const toStringSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_string')!; const toDateSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; const toBooleanSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; const toIpSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_ip')!; const toGeoPointSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geopoint')!; +const toGeoShapeSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geoshape')!; const toCartesianPointSignature = evalFunctionDefinitions.find( ({ name }) => name === 'to_cartesianpoint' )!; - -const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; +const toCartesianShapeSignature = evalFunctionDefinitions.find( + ({ name }) => name === 'to_cartesianshape' +)!; +const toVersionSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_version')!; const nestedFunctions = { - number: prepareNestedFunction(toInteger), + double: prepareNestedFunction(toDoubleSignature), + integer: prepareNestedFunction(toInteger), string: prepareNestedFunction(toStringSignature), + text: prepareNestedFunction(toStringSignature), + keyword: prepareNestedFunction(toStringSignature), date: prepareNestedFunction(toDateSignature), boolean: prepareNestedFunction(toBooleanSignature), ip: prepareNestedFunction(toIpSignature), + version: prepareNestedFunction(toVersionSignature), geo_point: prepareNestedFunction(toGeoPointSignature), + geo_shape: prepareNestedFunction(toGeoShapeSignature), cartesian_point: prepareNestedFunction(toCartesianPointSignature), + cartesian_shape: prepareNestedFunction(toCartesianShapeSignature), + datetime: prepareNestedFunction(toDateSignature), }; const literals = { @@ -152,7 +164,7 @@ function getFieldMapping( ...rest, }; } - return { name: 'stringField', type, ...rest }; + return { name: 'textField', type, ...rest }; }); } @@ -351,7 +363,7 @@ describe('validation logic', () => { for (const op of ['>', '>=', '<', '<=', '==', '!=']) { testErrorsAndWarnings(`row var = 5 ${op} 0`, []); testErrorsAndWarnings(`row var = NOT 5 ${op} 0`, []); - testErrorsAndWarnings(`row var = (numberField ${op} 0)`, ['Unknown column [numberField]']); + testErrorsAndWarnings(`row var = (doubleField ${op} 0)`, ['Unknown column [doubleField]']); testErrorsAndWarnings(`row var = (NOT (5 ${op} 0))`, []); testErrorsAndWarnings(`row var = to_ip("127.0.0.1") ${op} to_ip("127.0.0.1")`, []); testErrorsAndWarnings(`row var = now() ${op} now()`, []); @@ -360,8 +372,8 @@ describe('validation logic', () => { ['==', '!='].includes(op) ? [] : [ - `Argument of [${op}] must be [number], found value [false] type [boolean]`, - `Argument of [${op}] must be [number], found value [false] type [boolean]`, + `Argument of [${op}] must be [date], found value [false] type [boolean]`, + `Argument of [${op}] must be [date], found value [false] type [boolean]`, ] ); for (const [valueTypeA, valueTypeB] of [['now()', '"2022"']]) { @@ -375,10 +387,10 @@ describe('validation logic', () => { testErrorsAndWarnings( `row var = now() ${op} now()`, ['+', '-'].includes(op) - ? [`Argument of [${op}] must be [time_literal], found value [now()] type [date]`] + ? [`Argument of [${op}] must be [date_period], found value [now()] type [date]`] : [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, ] ); } @@ -389,16 +401,16 @@ describe('validation logic', () => { testErrorsAndWarnings(`row var = NOT "a" ${op} "?a"`, []); testErrorsAndWarnings(`row var = NOT "a" NOT ${op} "?a"`, []); testErrorsAndWarnings(`row var = 5 ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [5] type [number]`, + `Argument of [${op}] must be [text], found value [5] type [integer]`, ]); testErrorsAndWarnings(`row var = 5 NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [5] type [number]`, + `Argument of [not_${op}] must be [text], found value [5] type [integer]`, ]); testErrorsAndWarnings(`row var = NOT 5 ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [5] type [number]`, + `Argument of [${op}] must be [text], found value [5] type [integer]`, ]); testErrorsAndWarnings(`row var = NOT 5 NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [5] type [number]`, + `Argument of [not_${op}] must be [text], found value [5] type [integer]`, ]); } @@ -438,8 +450,8 @@ describe('validation logic', () => { ]); for (const op of ['*', '/', '%']) { testErrorsAndWarnings(`row var = now() ${op} 1 ${timeLiteral.name}`, [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [1 ${timeLiteral.name}] type [duration]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [1 ${timeLiteral.name}] type [duration]`, ]); } } @@ -449,13 +461,13 @@ describe('validation logic', () => { describe('show', () => { testErrorsAndWarnings('show', ["SyntaxError: missing 'info' at ''"]); testErrorsAndWarnings('show info', []); - testErrorsAndWarnings('show numberField', [ - "SyntaxError: token recognition error at: 'n'", + testErrorsAndWarnings('show doubleField', [ + "SyntaxError: token recognition error at: 'd'", + "SyntaxError: token recognition error at: 'o'", "SyntaxError: token recognition error at: 'u'", - "SyntaxError: token recognition error at: 'm'", "SyntaxError: token recognition error at: 'b'", + "SyntaxError: token recognition error at: 'l'", "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'", @@ -475,11 +487,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from index | limit a', [ "SyntaxError: mismatched input 'a' expecting INTEGER_LITERAL", ]); - testErrorsAndWarnings('from index | limit numberField', [ - "SyntaxError: mismatched input 'numberField' expecting INTEGER_LITERAL", + testErrorsAndWarnings('from index | limit doubleField', [ + "SyntaxError: mismatched input 'doubleField' expecting INTEGER_LITERAL", ]); - testErrorsAndWarnings('from index | limit stringField', [ - "SyntaxError: mismatched input 'stringField' expecting INTEGER_LITERAL", + testErrorsAndWarnings('from index | limit textField', [ + "SyntaxError: mismatched input 'textField' expecting INTEGER_LITERAL", ]); testErrorsAndWarnings('from index | limit 4', []); }); @@ -490,8 +502,14 @@ describe('validation logic', () => { describe('keep', () => { testErrorsAndWarnings('from index | keep ', ["SyntaxError: missing ID_PATTERN at ''"]); - testErrorsAndWarnings('from index | keep stringField, numberField, dateField', []); - testErrorsAndWarnings('from index | keep `stringField`, `numberField`, `dateField`', []); + testErrorsAndWarnings( + 'from index | keep keywordField, doubleField, integerField, dateField', + [] + ); + testErrorsAndWarnings( + 'from index | keep `keywordField`, `doubleField`, `integerField`, `dateField`', + [] + ); testErrorsAndWarnings('from index | keep 4.5', [ "SyntaxError: token recognition error at: '4'", "SyntaxError: token recognition error at: '5'", @@ -499,27 +517,27 @@ describe('validation logic', () => { "SyntaxError: missing ID_PATTERN at ''", ]); testErrorsAndWarnings('from index | keep `4.5`', ['Unknown column [4.5]']); - testErrorsAndWarnings('from index | keep missingField, numberField, dateField', [ + testErrorsAndWarnings('from index | keep missingField, doubleField, dateField', [ 'Unknown column [missingField]', ]); testErrorsAndWarnings('from index | keep `any#Char$Field`', []); testErrorsAndWarnings('from index | project ', [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | project stringField, numberField, dateField', [ + testErrorsAndWarnings('from index | project textField, doubleField, dateField', [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | PROJECT stringField, numberField, dateField', [ + testErrorsAndWarnings('from index | PROJECT textField, doubleField, dateField', [ "SyntaxError: mismatched input 'PROJECT' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | project missingField, numberField, dateField', [ + testErrorsAndWarnings('from index | project missingField, doubleField, dateField', [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | keep s*', []); + testErrorsAndWarnings('from index | keep k*', []); testErrorsAndWarnings('from index | keep *Field', []); - testErrorsAndWarnings('from index | keep s*Field', []); - testErrorsAndWarnings('from index | keep string*Field', []); - testErrorsAndWarnings('from index | keep s*, n*', []); + testErrorsAndWarnings('from index | keep k*Field', []); + testErrorsAndWarnings('from index | keep key*Field', []); + testErrorsAndWarnings('from index | keep k*, i*', []); testErrorsAndWarnings('from index | keep m*', ['Unknown column [m*]']); testErrorsAndWarnings('from index | keep *m', ['Unknown column [*m]']); testErrorsAndWarnings('from index | keep d*m', ['Unknown column [d*m]']); @@ -532,41 +550,41 @@ describe('validation logic', () => { ); testErrorsAndWarnings( - `FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | KEEP \`MIN(numberField * 10)\``, + `FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | KEEP \`MIN(doubleField * 10)\``, [] ); testErrorsAndWarnings( - `FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| KEEP \`COUNT(*)\``, + `FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| KEEP \`COUNT(*)\``, [] ); }); describe('drop', () => { testErrorsAndWarnings('from index | drop ', ["SyntaxError: missing ID_PATTERN at ''"]); - testErrorsAndWarnings('from index | drop stringField, numberField, dateField', []); + testErrorsAndWarnings('from index | drop textField, doubleField, dateField', []); testErrorsAndWarnings('from index | drop 4.5', [ "SyntaxError: token recognition error at: '4'", "SyntaxError: token recognition error at: '5'", "SyntaxError: missing ID_PATTERN at '.'", "SyntaxError: missing ID_PATTERN at ''", ]); - testErrorsAndWarnings('from index | drop missingField, numberField, dateField', [ + testErrorsAndWarnings('from index | drop missingField, doubleField, dateField', [ 'Unknown column [missingField]', ]); testErrorsAndWarnings('from index | drop `any#Char$Field`', []); - testErrorsAndWarnings('from index | drop s*', []); - testErrorsAndWarnings('from index | drop s**Field', []); + testErrorsAndWarnings('from index | drop t*', []); + testErrorsAndWarnings('from index | drop t**Field', []); testErrorsAndWarnings('from index | drop *Field*', []); - testErrorsAndWarnings('from index | drop s*F*d', []); + testErrorsAndWarnings('from index | drop t*F*d', []); testErrorsAndWarnings('from index | drop *Field', []); - testErrorsAndWarnings('from index | drop s*Field', []); - testErrorsAndWarnings('from index | drop string*Field', []); - testErrorsAndWarnings('from index | drop s*, n*', []); + testErrorsAndWarnings('from index | drop t*Field', []); + testErrorsAndWarnings('from index | drop textField', []); + testErrorsAndWarnings('from index | drop s*, d*', ['Unknown column [s*]']); testErrorsAndWarnings('from index | drop m*', ['Unknown column [m*]']); testErrorsAndWarnings('from index | drop *m', ['Unknown column [*m]']); testErrorsAndWarnings('from index | drop d*m', ['Unknown column [d*m]']); testErrorsAndWarnings('from index | drop *', ['Removing all fields is not allowed [*]']); - testErrorsAndWarnings('from index | drop stringField, *', [ + testErrorsAndWarnings('from index | drop textField, *', [ 'Removing all fields is not allowed [*]', ]); testErrorsAndWarnings( @@ -575,16 +593,16 @@ describe('validation logic', () => { ['Drop [@timestamp] will remove all time filters to the search results'] ); testErrorsAndWarnings( - 'from index | drop stringField, @timestamp', + 'from index | drop textField, @timestamp', [], ['Drop [@timestamp] will remove all time filters to the search results'] ); testErrorsAndWarnings( - `FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | DROP \`MIN(numberField * 10)\``, + `FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | DROP \`MIN(doubleField * 10)\``, [] ); testErrorsAndWarnings( - `FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| DROP \`COUNT(*)\``, + `FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| DROP \`COUNT(*)\``, [] ); }); @@ -593,11 +611,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | mv_expand ', [ "SyntaxError: missing {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER} at ''", ]); - for (const type of ['string', 'number', 'date', 'boolean', 'ip']) { + for (const type of ['text', 'integer', 'date', 'boolean', 'ip']) { testErrorsAndWarnings(`from a_index | mv_expand ${type}Field`, []); } - testErrorsAndWarnings('from a_index | mv_expand numberField, b', [ + testErrorsAndWarnings('from a_index | mv_expand doubleField, b', [ "SyntaxError: token recognition error at: ','", "SyntaxError: extraneous input 'b' expecting ", ]); @@ -612,24 +630,24 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | rename', [ "SyntaxError: mismatched input '' expecting ID_PATTERN", ]); - testErrorsAndWarnings('from a_index | rename stringField', [ + testErrorsAndWarnings('from a_index | rename textField', [ "SyntaxError: mismatched input '' expecting 'as'", ]); testErrorsAndWarnings('from a_index | rename a', [ "SyntaxError: mismatched input '' expecting 'as'", 'Unknown column [a]', ]); - testErrorsAndWarnings('from a_index | rename stringField as', [ + testErrorsAndWarnings('from a_index | rename textField as', [ "SyntaxError: missing ID_PATTERN at ''", ]); testErrorsAndWarnings('from a_index | rename missingField as', [ "SyntaxError: missing ID_PATTERN at ''", 'Unknown column [missingField]', ]); - testErrorsAndWarnings('from a_index | rename stringField as b', []); - testErrorsAndWarnings('from a_index | rename stringField AS b', []); - testErrorsAndWarnings('from a_index | rename stringField As b', []); - testErrorsAndWarnings('from a_index | rename stringField As b, b AS c', []); + testErrorsAndWarnings('from a_index | rename textField as b', []); + testErrorsAndWarnings('from a_index | rename textField AS b', []); + testErrorsAndWarnings('from a_index | rename textField As b', []); + testErrorsAndWarnings('from a_index | rename textField As b, b AS c', []); testErrorsAndWarnings('from a_index | rename fn() as a', [ "SyntaxError: token recognition error at: '('", "SyntaxError: token recognition error at: ')'", @@ -637,18 +655,22 @@ describe('validation logic', () => { 'Unknown column [a]', ]); testErrorsAndWarnings( - 'from a_index | eval numberField + 1 | rename `numberField + 1` as a', + 'from a_index | eval doubleField + 1 | rename `doubleField + 1` as a', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField) | rename `avg(numberField)` as avg0', + 'from a_index | stats avg(doubleField) | rename `avg(doubleField)` as avg0', [] ); - testErrorsAndWarnings('from a_index |eval numberField + 1 | rename `numberField + 1` as ', [ + testErrorsAndWarnings('from a_index |eval doubleField + 1 | rename `doubleField + 1` as ', [ "SyntaxError: missing ID_PATTERN at ''", ]); + testErrorsAndWarnings('from a_index | rename key* as keywords', [ + 'Using wildcards (*) in RENAME is not allowed [key*]', + 'Unknown column [keywords]', + ]); testErrorsAndWarnings('from a_index | rename s* as strings', [ - 'Using wildcards (*) in RENAME is not allowed [s*]', + 'Unknown column [s*]', 'Unknown column [strings]', ]); testErrorsAndWarnings('row a = 10 | rename a as `this``is fine`', []); @@ -661,51 +683,48 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | dissect', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | dissect stringField', [ + testErrorsAndWarnings('from a_index | dissect textField', [ "SyntaxError: missing QUOTED_STRING at ''", ]); - testErrorsAndWarnings('from a_index | dissect stringField 2', [ + testErrorsAndWarnings('from a_index | dissect textField 2', [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING", ]); - testErrorsAndWarnings('from a_index | dissect stringField .', [ + testErrorsAndWarnings('from a_index | dissect textField .', [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - 'Unknown column [stringField.]', + 'Unknown column [textField.]', ]); - testErrorsAndWarnings('from a_index | dissect stringField %a', [ + testErrorsAndWarnings('from a_index | dissect textField %a', [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING", "SyntaxError: mismatched input '' expecting '='", ]); // Do not try to validate the dissect pattern string - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}"', []); - testErrorsAndWarnings('from a_index | dissect numberField "%{firstWord}"', [ - 'DISSECT only supports string type values, found [numberField] of type [number]', + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}"', []); + testErrorsAndWarnings('from a_index | dissect doubleField "%{firstWord}"', [ + 'DISSECT only supports string type values, found [doubleField] of type [double]', ]); - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option ', [ + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" option ', [ "SyntaxError: mismatched input '' expecting '='", ]); - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option = ', [ + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" option = ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET}", 'Invalid option for DISSECT: [option]', ]); - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option = 1', [ + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" option = 1', [ 'Invalid option for DISSECT: [option]', ]); testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" append_separator = "-"', + 'from a_index | dissect textField "%{firstWord}" append_separator = "-"', [] ); testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" ignore_missing = true', + 'from a_index | dissect textField "%{firstWord}" ignore_missing = true', ['Invalid option for DISSECT: [ignore_missing]'] ); testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" append_separator = true', + 'from a_index | dissect textField "%{firstWord}" append_separator = true', ['Invalid value for DISSECT append_separator: expected a string, but was [true]'] ); - testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" | keep firstWord', - [] - ); + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" | keep firstWord', []); // testErrorsAndWarnings('from a_index | dissect s* "%{a}"', [ // 'Using wildcards (*) in dissect is not allowed [s*]', // ]); @@ -715,25 +734,26 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | grok', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | grok stringField', [ + testErrorsAndWarnings('from a_index | grok textField', [ "SyntaxError: missing QUOTED_STRING at ''", ]); - testErrorsAndWarnings('from a_index | grok stringField 2', [ + testErrorsAndWarnings('from a_index | grok textField 2', [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING", ]); - testErrorsAndWarnings('from a_index | grok stringField .', [ + testErrorsAndWarnings('from a_index | grok textField .', [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - 'Unknown column [stringField.]', + 'Unknown column [textField.]', ]); - testErrorsAndWarnings('from a_index | grok stringField %a', [ + testErrorsAndWarnings('from a_index | grok textField %a', [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING", ]); + // @TODO: investigate // Do not try to validate the grok pattern string - testErrorsAndWarnings('from a_index | grok stringField "%{firstWord}"', []); - testErrorsAndWarnings('from a_index | grok numberField "%{firstWord}"', [ - 'GROK only supports string type values, found [numberField] of type [number]', + testErrorsAndWarnings('from a_index | grok textField "%{firstWord}"', []); + testErrorsAndWarnings('from a_index | grok doubleField "%{firstWord}"', [ + 'GROK only supports string type values, found [doubleField] of type [double]', ]); - testErrorsAndWarnings('from a_index | grok stringField "%{firstWord}" | keep firstWord', []); + testErrorsAndWarnings('from a_index | grok textField "%{firstWord}" | keep firstWord', []); // testErrorsAndWarnings('from a_index | grok s* "%{a}"', [ // 'Using wildcards (*) in grok is not allowed [s*]', // ]); @@ -750,20 +770,20 @@ describe('validation logic', () => { testErrorsAndWarnings(`from a_index | where NOT ${nValue} > 0`, []); } for (const op of ['>', '>=', '<', '<=', '==', '!=']) { - testErrorsAndWarnings(`from a_index | where numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | where NOT numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | where (numberField ${op} 0)`, []); - testErrorsAndWarnings(`from a_index | where (NOT (numberField ${op} 0))`, []); + testErrorsAndWarnings(`from a_index | where doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | where NOT doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | where (doubleField ${op} 0)`, []); + testErrorsAndWarnings(`from a_index | where (NOT (doubleField ${op} 0))`, []); testErrorsAndWarnings(`from a_index | where 1 ${op} 0`, []); - for (const type of ['string', 'number', 'date', 'boolean', 'ip']) { + for (const type of ['text', 'double', 'date', 'boolean', 'ip']) { testErrorsAndWarnings( `from a_index | where ${type}Field ${op} ${type}Field`, type !== 'boolean' || ['==', '!='].includes(op) ? [] : [ - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, ] ); } @@ -778,17 +798,17 @@ describe('validation logic', () => { .fill('- ') .map((_, i) => (i % 2 ? oddOp : evenOp)) .join(''); - testErrorsAndWarnings(`from a_index | where ${unaryCombination} numberField > 0`, []); + testErrorsAndWarnings(`from a_index | where ${unaryCombination} doubleField > 0`, []); testErrorsAndWarnings( - `from a_index | where ${unaryCombination} round(numberField) > 0`, + `from a_index | where ${unaryCombination} round(doubleField) > 0`, [] ); testErrorsAndWarnings( - `from a_index | where 1 + ${unaryCombination} numberField > 0`, + `from a_index | where 1 + ${unaryCombination} doubleField > 0`, [] ); // still valid - testErrorsAndWarnings(`from a_index | where 1 ${unaryCombination} numberField > 0`, []); + testErrorsAndWarnings(`from a_index | where 1 ${unaryCombination} doubleField > 0`, []); } } testErrorsAndWarnings( @@ -797,52 +817,52 @@ describe('validation logic', () => { ); } for (const wrongOp of ['*', '/', '%']) { - testErrorsAndWarnings(`from a_index | where ${wrongOp}+ numberField`, [ + testErrorsAndWarnings(`from a_index | where ${wrongOp}+ doubleField`, [ `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, ]); } // Skip these tests until the insensitive case equality gets restored back - testErrorsAndWarnings.skip(`from a_index | where numberField =~ 0`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where doubleField =~ 0`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | where NOT numberField =~ 0`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where NOT doubleField =~ 0`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | where (numberField =~ 0)`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where (doubleField =~ 0)`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | where (NOT (numberField =~ 0))`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where (NOT (doubleField =~ 0))`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); testErrorsAndWarnings.skip(`from a_index | where 1 =~ 0`, [ - 'Argument of [=~] must be [string], found value [1] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + 'Argument of [=~] must be [text], found value [1] type [number]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | eval stringField =~ 0`, [ - `Argument of [=~] must be [string], found value [0] type [number]`, + testErrorsAndWarnings.skip(`from a_index | eval textField =~ 0`, [ + `Argument of [=~] must be [text], found value [0] type [number]`, ]); for (const op of ['like', 'rlike']) { - testErrorsAndWarnings(`from a_index | where stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where NOT stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where NOT stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where NOT textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where NOT textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | where numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | where NOT numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where NOT doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | where NOT numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where NOT doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); } @@ -866,21 +886,21 @@ 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', []); + testErrorsAndWarnings('from a_index | where textField == "a" or null', []); }); describe('eval', () => { testErrorsAndWarnings('from a_index | eval ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | eval stringField ', []); - testErrorsAndWarnings('from a_index | eval b = stringField', []); - testErrorsAndWarnings('from a_index | eval numberField + 1', []); - testErrorsAndWarnings('from a_index | eval numberField + ', [ - "SyntaxError: no viable alternative at input 'numberField + '", + testErrorsAndWarnings('from a_index | eval textField ', []); + testErrorsAndWarnings('from a_index | eval b = textField', []); + testErrorsAndWarnings('from a_index | eval doubleField + 1', []); + testErrorsAndWarnings('from a_index | eval doubleField + ', [ + "SyntaxError: no viable alternative at input 'doubleField + '", ]); - testErrorsAndWarnings('from a_index | eval stringField + 1', [ - 'Argument of [+] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval textField + 1', [ + 'Argument of [+] must be [double], found value [textField] type [text]', ]); testErrorsAndWarnings('from a_index | eval a=b', ['Unknown column [b]']); testErrorsAndWarnings('from a_index | eval a=b, ', [ @@ -891,24 +911,24 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval a=round(', [ "SyntaxError: no viable alternative at input 'round('", ]); - testErrorsAndWarnings('from a_index | eval a=round(numberField) ', []); - testErrorsAndWarnings('from a_index | eval a=round(numberField), ', [ + testErrorsAndWarnings('from a_index | eval a=round(doubleField) ', []); + testErrorsAndWarnings('from a_index | eval a=round(doubleField), ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | eval a=round(numberField) + round(numberField) ', []); - testErrorsAndWarnings('from a_index | eval a=round(numberField) + round(stringField) ', [ - 'Argument of [round] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval a=round(doubleField) + round(doubleField) ', []); + testErrorsAndWarnings('from a_index | eval a=round(doubleField) + round(textField) ', [ + 'Argument of [round] must be [double], found value [textField] type [text]', ]); testErrorsAndWarnings( - 'from a_index | eval a=round(numberField) + round(stringField), numberField ', - ['Argument of [round] must be [number], found value [stringField] type [string]'] + 'from a_index | eval a=round(doubleField) + round(textField), doubleField ', + ['Argument of [round] must be [double], found value [textField] type [text]'] ); testErrorsAndWarnings( - 'from a_index | eval a=round(numberField) + round(numberField), numberField ', + 'from a_index | eval a=round(doubleField) + round(doubleField), doubleField ', [] ); testErrorsAndWarnings( - 'from a_index | eval a=round(numberField) + round(numberField), b = numberField ', + 'from a_index | eval a=round(doubleField) + round(doubleField), b = doubleField ', [] ); @@ -936,15 +956,15 @@ describe('validation logic', () => { .fill('- ') .map((_, i) => (i % 2 ? oddOp : evenOp)) .join(''); - testErrorsAndWarnings(`from a_index | eval ${unaryCombination} numberField`, []); - testErrorsAndWarnings(`from a_index | eval a=${unaryCombination} numberField`, []); + testErrorsAndWarnings(`from a_index | eval ${unaryCombination} doubleField`, []); + testErrorsAndWarnings(`from a_index | eval a=${unaryCombination} doubleField`, []); testErrorsAndWarnings( - `from a_index | eval a=${unaryCombination} round(numberField)`, + `from a_index | eval a=${unaryCombination} round(doubleField)`, [] ); - testErrorsAndWarnings(`from a_index | eval 1 + ${unaryCombination} numberField`, []); + testErrorsAndWarnings(`from a_index | eval 1 + ${unaryCombination} doubleField`, []); // still valid - testErrorsAndWarnings(`from a_index | eval 1 ${unaryCombination} numberField`, []); + testErrorsAndWarnings(`from a_index | eval 1 ${unaryCombination} doubleField`, []); } } @@ -955,7 +975,7 @@ describe('validation logic', () => { } for (const wrongOp of ['*', '/', '%']) { - testErrorsAndWarnings(`from a_index | eval ${wrongOp}+ numberField`, [ + testErrorsAndWarnings(`from a_index | eval ${wrongOp}+ doubleField`, [ `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, ]); } @@ -991,46 +1011,58 @@ describe('validation logic', () => { ] ); for (const op of ['>', '>=', '<', '<=', '==', '!=']) { - testErrorsAndWarnings(`from a_index | eval numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | eval NOT numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | eval (numberField ${op} 0)`, []); - testErrorsAndWarnings(`from a_index | eval (NOT (numberField ${op} 0))`, []); + testErrorsAndWarnings(`from a_index | eval doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | eval NOT doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | eval (doubleField ${op} 0)`, []); + testErrorsAndWarnings(`from a_index | eval (NOT (doubleField ${op} 0))`, []); testErrorsAndWarnings(`from a_index | eval 1 ${op} 0`, []); - for (const type of ['string', 'number', 'date', 'boolean', 'ip']) { - testErrorsAndWarnings( - `from a_index | eval ${type}Field ${op} ${type}Field`, - type !== 'boolean' || ['==', '!='].includes(op) - ? [] - : [ - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, - ] - ); + for (const type of ['text', 'double', 'date', 'boolean', 'ip']) { + if (type === 'boolean') { + testErrorsAndWarnings( + `from a_index | eval ${type}Field ${op} ${type}Field`, + type !== 'boolean' || ['==', '!='].includes(op) + ? [] + : [ + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, + ] + ); + } else { + testErrorsAndWarnings( + `from a_index | eval ${type}Field ${op} ${type}Field`, + type !== 'boolean' || ['==', '!='].includes(op) + ? [] + : [ + `Argument of [${op}] must be [double], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [double], found value [${type}Field] type [${type}]`, + ] + ); + } } // Implicit casting of literal values tests - testErrorsAndWarnings(`from a_index | eval numberField ${op} stringField`, [ - `Argument of [${op}] must be [number], found value [stringField] type [string]`, + testErrorsAndWarnings(`from a_index | eval doubleField ${op} textField`, [ + `Argument of [${op}] must be [double], found value [textField] type [text]`, ]); - testErrorsAndWarnings(`from a_index | eval stringField ${op} numberField`, [ - `Argument of [${op}] must be [number], found value [stringField] type [string]`, + testErrorsAndWarnings(`from a_index | eval keywordField ${op} doubleField`, [ + `Argument of [${op}] must be [double], found value [keywordField] type [keyword]`, ]); - testErrorsAndWarnings(`from a_index | eval numberField ${op} "2022"`, [ - `Argument of [${op}] must be [number], found value ["2022"] type [string]`, + testErrorsAndWarnings(`from a_index | eval doubleField ${op} "2022"`, [ + `Argument of [${op}] must be [date], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval dateField ${op} stringField`, [ - `Argument of [${op}] must be [string], found value [dateField] type [date]`, + testErrorsAndWarnings(`from a_index | eval dateField ${op} keywordField`, [ + `Argument of [${op}] must be [date], found value [keywordField] type [keyword]`, ]); - testErrorsAndWarnings(`from a_index | eval stringField ${op} dateField`, [ - `Argument of [${op}] must be [string], found value [dateField] type [date]`, + testErrorsAndWarnings(`from a_index | eval keywordField ${op} dateField`, [ + `Argument of [${op}] must be [date], found value [keywordField] type [keyword]`, ]); // Check that the implicit cast doesn't apply for fields - testErrorsAndWarnings(`from a_index | eval stringField ${op} 0`, [ - `Argument of [${op}] must be [number], found value [stringField] type [string]`, + testErrorsAndWarnings(`from a_index | eval textField ${op} 0`, [ + `Argument of [${op}] must be [double], found value [textField] type [text]`, ]); - testErrorsAndWarnings(`from a_index | eval stringField ${op} now()`, [ - `Argument of [${op}] must be [string], found value [now()] type [date]`, + testErrorsAndWarnings(`from a_index | eval textField ${op} now()`, [ + `Argument of [${op}] must be [date], found value [textField] type [text]`, ]); testErrorsAndWarnings(`from a_index | eval dateField ${op} "2022"`, []); @@ -1043,13 +1075,13 @@ describe('validation logic', () => { `from a_index | eval booleanField ${op} "true"`, ['==', '!='].includes(op) ? [] - : [`Argument of [${op}] must be [string], found value [booleanField] type [boolean]`] + : [`Argument of [${op}] must be [date], found value [booleanField] type [boolean]`] ); testErrorsAndWarnings( `from a_index | eval "true" ${op} booleanField`, ['==', '!='].includes(op) ? [] - : [`Argument of [${op}] must be [string], found value [booleanField] type [boolean]`] + : [`Argument of [${op}] must be [date], found value [booleanField] type [boolean]`] ); testErrorsAndWarnings(`from a_index | eval ipField ${op} "136.36.3.205"`, []); @@ -1072,25 +1104,31 @@ describe('validation logic', () => { ); for (const op of ['+', '-', '*', '/', '%']) { - testErrorsAndWarnings(`from a_index | eval numberField ${op} 1`, []); - testErrorsAndWarnings(`from a_index | eval (numberField ${op} 1)`, []); + testErrorsAndWarnings(`from a_index | eval doubleField ${op} 1`, []); + testErrorsAndWarnings(`from a_index | eval (doubleField ${op} 1)`, []); testErrorsAndWarnings(`from a_index | eval 1 ${op} 1`, []); testErrorsAndWarnings( `from a_index | eval now() ${op} now()`, ['+', '-'].includes(op) - ? [`Argument of [${op}] must be [time_literal], found value [now()] type [date]`] + ? [`Argument of [${op}] must be [date_period], found value [now()] type [date]`] : [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, ] ); - testErrorsAndWarnings(`from a_index | eval 1 ${op} "1"`, [ - `Argument of [${op}] must be [number], found value [\"1\"] type [string]`, - ]); - testErrorsAndWarnings(`from a_index | eval "1" ${op} 1`, [ - `Argument of [${op}] must be [number], found value [\"1\"] type [string]`, - ]); + testErrorsAndWarnings( + `from a_index | eval 1 ${op} "1"`, + ['+', '-'].includes(op) + ? [`Argument of [${op}] must be [date_period], found value [1] type [integer]`] + : [`Argument of [${op}] must be [double], found value [\"1\"] type [string]`] + ); + testErrorsAndWarnings( + `from a_index | eval "1" ${op} 1`, + ['+', '-'].includes(op) + ? [`Argument of [${op}] must be [date_period], found value [1] type [integer]`] + : [`Argument of [${op}] must be [double], found value [\"1\"] type [string]`] + ); // TODO: enable when https://github.com/elastic/elasticsearch/issues/108432 is complete // testErrorsAndWarnings(`from a_index | eval "2022" ${op} 1 day`, []); } @@ -1109,54 +1147,51 @@ describe('validation logic', () => { ); } for (const op of ['like', 'rlike']) { - testErrorsAndWarnings(`from a_index | eval stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval NOT stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval NOT stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval NOT textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval NOT textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval NOT numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval NOT doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval NOT numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval NOT doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); } // test lists testErrorsAndWarnings('from a_index | eval 1 in (1, 2, 3)', []); - testErrorsAndWarnings('from a_index | eval numberField in (1, 2, 3)', []); - testErrorsAndWarnings('from a_index | eval numberField not in (1, 2, 3)', []); - testErrorsAndWarnings('from a_index | eval numberField not in (1, 2, 3, numberField)', []); - testErrorsAndWarnings('from a_index | eval 1 in (1, 2, 3, round(numberField))', []); + testErrorsAndWarnings('from a_index | eval doubleField in (1, 2, 3)', []); + testErrorsAndWarnings('from a_index | eval doubleField not in (1, 2, 3)', []); + testErrorsAndWarnings('from a_index | eval doubleField not in (1, 2, 3, doubleField)', []); + testErrorsAndWarnings('from a_index | eval 1 in (1, 2, 3, round(doubleField))', []); testErrorsAndWarnings('from a_index | eval "a" in ("a", "b", "c")', []); - testErrorsAndWarnings('from a_index | eval stringField in ("a", "b", "c")', []); - testErrorsAndWarnings('from a_index | eval stringField not in ("a", "b", "c")', []); - testErrorsAndWarnings( - 'from a_index | eval stringField not in ("a", "b", "c", stringField)', - [] - ); + testErrorsAndWarnings('from a_index | eval textField in ("a", "b", "c")', []); + testErrorsAndWarnings('from a_index | eval textField not in ("a", "b", "c")', []); + testErrorsAndWarnings('from a_index | eval textField not in ("a", "b", "c", textField)', []); testErrorsAndWarnings('from a_index | eval 1 in ("a", "b", "c")', [ // 'Argument of [in] must be [number[]], found value [("a", "b", "c")] type [(string, string, string)]', ]); - testErrorsAndWarnings('from a_index | eval numberField in ("a", "b", "c")', [ + testErrorsAndWarnings('from a_index | eval doubleField in ("a", "b", "c")', [ // 'Argument of [in] must be [number[]], found value [("a", "b", "c")] type [(string, string, string)]', ]); - testErrorsAndWarnings('from a_index | eval numberField not in ("a", "b", "c")', [ + testErrorsAndWarnings('from a_index | eval doubleField not in ("a", "b", "c")', [ // 'Argument of [not_in] must be [number[]], found value [("a", "b", "c")] type [(string, string, string)]', ]); - testErrorsAndWarnings('from a_index | eval numberField not in (1, 2, 3, stringField)', [ - // 'Argument of [not_in] must be [number[]], found value [(1, 2, 3, stringField)] type [(number, number, number, string)]', + testErrorsAndWarnings('from a_index | eval doubleField not in (1, 2, 3, textField)', [ + // 'Argument of [not_in] must be [number[]], found value [(1, 2, 3, textField)] type [(number, number, number, string)]', ]); - testErrorsAndWarnings('from a_index | eval avg(numberField)', [ + testErrorsAndWarnings('from a_index | eval avg(doubleField)', [ 'EVAL does not support function avg', ]); testErrorsAndWarnings( - 'from a_index | stats avg(numberField) | eval `avg(numberField)` + 1', + 'from a_index | stats avg(doubleField) | eval `avg(doubleField)` + 1', [] ); testErrorsAndWarnings('from a_index | eval not', [ @@ -1167,17 +1202,17 @@ describe('validation logic', () => { "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | eval stringField in stringField', [ - "SyntaxError: missing '(' at 'stringField'", + testErrorsAndWarnings('from a_index | eval textField in textField', [ + "SyntaxError: missing '(' at 'textField'", "SyntaxError: mismatched input '' expecting {',', ')'}", ]); - testErrorsAndWarnings('from a_index | eval stringField in stringField)', [ - "SyntaxError: missing '(' at 'stringField'", + testErrorsAndWarnings('from a_index | eval textField in textField)', [ + "SyntaxError: missing '(' at 'textField'", 'Error: [in] function expects exactly 2 arguments, got 1.', ]); - testErrorsAndWarnings('from a_index | eval stringField not in stringField', [ - "SyntaxError: missing '(' at 'stringField'", + testErrorsAndWarnings('from a_index | eval textField not in textField', [ + "SyntaxError: missing '(' at 'textField'", "SyntaxError: mismatched input '' expecting {',', ')'}", ]); @@ -1236,8 +1271,8 @@ describe('validation logic', () => { ]); for (const op of ['*', '/', '%']) { testErrorsAndWarnings(`from a_index | eval var = now() ${op} 1 ${unit}`, [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [1 ${unit}] type [duration]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [1 ${unit}] type [duration]`, ]); } } @@ -1250,26 +1285,26 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort "field" ', []); testErrorsAndWarnings('from a_index | sort wrongField ', ['Unknown column [wrongField]']); - testErrorsAndWarnings('from a_index | sort numberField, ', [ + testErrorsAndWarnings('from a_index | sort doubleField, ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | sort numberField, stringField', []); + testErrorsAndWarnings('from a_index | sort doubleField, textField', []); for (const dir of ['desc', 'asc']) { testErrorsAndWarnings(`from a_index | sort "field" ${dir} `, []); - testErrorsAndWarnings(`from a_index | sort numberField ${dir} `, []); - testErrorsAndWarnings(`from a_index | sort numberField ${dir} nulls `, [ + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} `, []); + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} nulls `, [ "SyntaxError: missing {'first', 'last'} at ''", ]); for (const nullDir of ['first', 'last']) { - testErrorsAndWarnings(`from a_index | sort numberField ${dir} nulls ${nullDir}`, []); - testErrorsAndWarnings(`from a_index | sort numberField ${dir} ${nullDir}`, [ + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} nulls ${nullDir}`, []); + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} ${nullDir}`, [ `SyntaxError: extraneous input '${nullDir}' expecting `, ]); } } for (const nullDir of ['first', 'last']) { - testErrorsAndWarnings(`from a_index | sort numberField nulls ${nullDir}`, []); - testErrorsAndWarnings(`from a_index | sort numberField ${nullDir}`, [ + testErrorsAndWarnings(`from a_index | sort doubleField nulls ${nullDir}`, []); + testErrorsAndWarnings(`from a_index | sort doubleField ${nullDir}`, [ `SyntaxError: extraneous input '${nullDir}' expecting `, ]); } @@ -1279,18 +1314,18 @@ describe('validation logic', () => { describe('sorting by expressions', () => { // SORT accepts complex expressions testErrorsAndWarnings( - 'from a_index | sort abs(numberField) - to_long(stringField) desc nulls first', + 'from a_index | sort abs(doubleField) - to_long(textField) desc nulls first', [] ); // Expression parts are also validated - testErrorsAndWarnings('from a_index | sort sin(stringField)', [ - 'Argument of [sin] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | sort sin(textField)', [ + 'Argument of [sin] must be [double], found value [textField] type [text]', ]); // Expression parts are also validated - testErrorsAndWarnings('from a_index | sort numberField + stringField', [ - 'Argument of [+] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | sort doubleField + textField', [ + 'Argument of [+] must be [double], found value [textField] type [text]', ]); }); }); @@ -1364,52 +1399,52 @@ describe('validation logic', () => { "SyntaxError: mismatched input 'is' expecting ", 'Unknown column [this]', ]); - testErrorsAndWarnings(`from a_index | enrich policy on stringField with `, [ + testErrorsAndWarnings(`from a_index | enrich policy on textField with `, [ "SyntaxError: mismatched input '' expecting ID_PATTERN", ]); - testErrorsAndWarnings(`from a_index | enrich policy on stringField with var0 `, [ + testErrorsAndWarnings(`from a_index | enrich policy on textField with var0 `, [ 'Unknown column [var0]', ]); - testErrorsAndWarnings(`from a_index |enrich policy on numberField with var0 = `, [ + testErrorsAndWarnings(`from a_index |enrich policy on doubleField with var0 = `, [ "SyntaxError: missing ID_PATTERN at ''", 'Unknown column [var0]', ]); - testErrorsAndWarnings(`from a_index | enrich policy on stringField with var0 = c `, [ + testErrorsAndWarnings(`from a_index | enrich policy on textField with var0 = c `, [ 'Unknown column [var0]', `Unknown column [c]`, ]); // need to re-enable once the fields/variables become location aware - // testErrorsAndWarnings(`from a_index | enrich policy on stringField with var0 = stringField `, [ - // `Unknown column [stringField]`, + // testErrorsAndWarnings(`from a_index | enrich policy on textField with var0 = textField `, [ + // `Unknown column [textField]`, // ]); - testErrorsAndWarnings(`from a_index |enrich policy on numberField with var0 = , `, [ + testErrorsAndWarnings(`from a_index |enrich policy on doubleField with var0 = , `, [ "SyntaxError: missing ID_PATTERN at ','", "SyntaxError: mismatched input '' expecting ID_PATTERN", 'Unknown column [var0]', ]); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField, var1 `, + `from a_index | enrich policy on textField with var0 = otherField, var1 `, ['Unknown column [var1]'] ); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField `, + `from a_index | enrich policy on textField with var0 = otherField `, [] ); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField, yetAnotherField `, + `from a_index | enrich policy on textField with var0 = otherField, yetAnotherField `, [] ); testErrorsAndWarnings( - `from a_index |enrich policy on numberField with var0 = otherField, var1 = `, + `from a_index |enrich policy on doubleField with var0 = otherField, var1 = `, ["SyntaxError: missing ID_PATTERN at ''", 'Unknown column [var1]'] ); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField, var1 = yetAnotherField`, + `from a_index | enrich policy on textField with var0 = otherField, var1 = yetAnotherField`, [] ); testErrorsAndWarnings( - 'from a_index | enrich policy on stringField with var0 = otherField, `this``is fine` = yetAnotherField', + 'from a_index | enrich policy on textField with var0 = otherField, `this``is fine` = yetAnotherField', [] ); testErrorsAndWarnings(`from a_index | enrich policy with `, [ @@ -1425,14 +1460,14 @@ describe('validation logic', () => { describe('shadowing', () => { testErrorsAndWarnings( - 'from a_index | eval stringField = 5', + 'from a_index | eval textField = 5', [], - ['Column [stringField] of type string has been overwritten as new type: number'] + ['Column [textField] of type text has been overwritten as new type: integer'] ); testErrorsAndWarnings( - 'from a_index | eval numberField = "5"', + 'from a_index | eval doubleField = "5"', [], - ['Column [numberField] of type number has been overwritten as new type: string'] + ['Column [doubleField] of type double has been overwritten as new type: string'] ); }); @@ -1469,7 +1504,7 @@ describe('validation logic', () => { for (const nesting of NESTED_DEPTHS) { // start with a quotable expression - const expr = 'round(numberField) + 1'; + const expr = 'round(doubleField) + 1'; const startingQuery = `from a_index | eval ${expr}`; // now pipe for each nesting level a new eval command that appends a +1 to the previous quoted expression const finalQuery = `${startingQuery} | ${Array(nesting) @@ -1554,7 +1589,7 @@ describe('validation logic', () => { it(`should not crash if no callbacks are available`, async () => { try { await validateQuery( - `from a_index | eval b = a | enrich policy | dissect stringField "%{firstWord}"`, + `from a_index | eval b = a | enrich policy | dissect textField "%{firstWord}"`, getAstAndSyntaxErrors, undefined, { @@ -1571,7 +1606,7 @@ describe('validation logic', () => { it(`should not crash if no callbacks are passed`, async () => { try { await validateQuery( - `from a_index | eval b = a | enrich policy | dissect stringField "%{firstWord}"`, + `from a_index | eval b = a | enrich policy | dissect textField "%{firstWord}"`, getAstAndSyntaxErrors ); } catch { @@ -1582,40 +1617,47 @@ describe('validation logic', () => { describe('inline casting', () => { // accepts casting - testErrorsAndWarnings('from a_index | eval 1::string', []); + testErrorsAndWarnings('from a_index | eval 1::keyword', []); // errors if the cast type is invalid // testErrorsAndWarnings('from a_index | eval 1::foo', ['Invalid type [foo] for casting']); // accepts casting with multiple types - testErrorsAndWarnings('from a_index | eval 1::string::long::double', []); + testErrorsAndWarnings('from a_index | eval 1::keyword::long::double', []); // takes into account casting in function arguments testErrorsAndWarnings('from a_index | eval trim("23"::double)', [ - 'Argument of [trim] must be [string], found value ["23"::double] type [double]', + 'Argument of [trim] must be [keyword], found value ["23"::double] type [double]', ]); - testErrorsAndWarnings('from a_index | eval trim(23::string)', []); + testErrorsAndWarnings('from a_index | eval trim(23::keyword)', []); testErrorsAndWarnings('from a_index | eval 1 + "2"::long', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"::LONG', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"::Long', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"::LoNg', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"', [ // just a counter-case to make sure the previous test is meaningful - 'Argument of [+] must be [number], found value ["2"] type [string]', + 'Argument of [+] must be [date_period], found value [1] type [integer]', ]); testErrorsAndWarnings( - 'from a_index | eval trim(to_double("23")::string::double::long::string::double)', + 'from a_index | eval trim(to_double("23")::keyword::double::long::keyword::double)', [ - 'Argument of [trim] must be [string], found value [to_double("23")::string::double::long::string::double] type [double]', + 'Argument of [trim] must be [keyword], found value [to_double("23")::keyword::double::long::keyword::double] type [double]', ] ); - // accepts elasticsearch subtypes and type aliases like int and keyword - // (once https://github.com/elastic/kibana/issues/174710 is done this won't be a special case anymore) testErrorsAndWarnings('from a_index | eval CEIL(23::long)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::unsigned_long)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::int)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::integer)', []); + testErrorsAndWarnings('from a_index | eval CEIL(23::Integer)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::double)', []); + testErrorsAndWarnings('from a_index | eval CEIL(23::DOUBLE)', []); + testErrorsAndWarnings('from a_index | eval CEIL(23::doubla)', [ + 'Argument of [ceil] must be [double], found value [23::doubla] type [doubla]', + ]); - testErrorsAndWarnings('from a_index | eval TRIM(23::string)', []); + testErrorsAndWarnings('from a_index | eval TRIM(23::keyword)', []); testErrorsAndWarnings('from a_index | eval TRIM(23::text)', []); testErrorsAndWarnings('from a_index | eval TRIM(23::keyword)', []); @@ -1630,439 +1672,501 @@ describe('validation logic', () => { // testErrorsAndWarnings('from a_index | eval 23::cartesian_point', ['wrong type!']); // still validates nested functions when they are casted - testErrorsAndWarnings('from a_index | eval to_lower(trim(numberField)::string)', [ - 'Argument of [trim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | eval to_lower(trim(doubleField)::keyword)', [ + 'Argument of [trim] must be [keyword], found value [doubleField] type [double]', ]); testErrorsAndWarnings( - 'from a_index | eval to_upper(trim(numberField)::string::string::string::string)', - ['Argument of [trim] must be [string], found value [numberField] type [number]'] + 'from a_index | eval to_upper(trim(doubleField)::keyword::keyword::keyword::keyword)', + ['Argument of [trim] must be [keyword], found value [doubleField] type [double]'] ); testErrorsAndWarnings( - 'from a_index | eval to_lower(to_upper(trim(numberField)::string)::string)', - ['Argument of [trim] must be [string], found value [numberField] type [number]'] + 'from a_index | eval to_lower(to_upper(trim(doubleField)::keyword)::keyword)', + ['Argument of [trim] must be [keyword], found value [doubleField] type [double]'] ); }); 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")`, - [] - ); - - testErrorsAndWarnings( - `row var = date_diff("mm", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, - [] - ); - - testErrorsAndWarnings( - `row var = date_diff("bogus", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, - [], - [ - '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"].', - ] - ); - - testErrorsAndWarnings( - `from a_index | eval date_diff(stringField, "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, - [] - ); - - testErrorsAndWarnings( - `from a_index | eval date_diff("month", dateField, "2023-12-02T11:00:00.000Z")`, - [] - ); - - testErrorsAndWarnings( - `from a_index | eval date_diff("month", "2023-12-02T11:00:00.000Z", dateField)`, - [] - ); - - testErrorsAndWarnings(`from a_index | eval date_diff("month", stringField, dateField)`, [ - 'Argument of [date_diff] must be [date], found value [stringField] type [string]', - ]); - - 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)', []); - - testErrorsAndWarnings( - 'from a_index | eval var = date_diff("year", to_datetime(dateField), to_datetime(dateField))', - [] - ); - - testErrorsAndWarnings( - 'from a_index | eval date_diff(booleanField, booleanField, booleanField)', - [ - 'Argument of [date_diff] must be [string], found value [booleanField] type [boolean]', - 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', - 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', - ] - ); - testErrorsAndWarnings('from a_index | eval date_diff(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)', []); - - testErrorsAndWarnings('from a_index | eval date_diff("year", "2022", "2022")', []); - testErrorsAndWarnings( - 'from a_index | eval date_diff("year", concat("20", "22"), concat("20", "22"))', - [ - 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [string]', - 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [string]', - ] - ); - }); - describe('abs', () => { + testErrorsAndWarnings('row var = abs(5.5)', []); + testErrorsAndWarnings('row abs(5.5)', []); + testErrorsAndWarnings('row var = abs(to_double(true))', []); testErrorsAndWarnings('row var = abs(5)', []); testErrorsAndWarnings('row abs(5)', []); - testErrorsAndWarnings('row var = abs(to_integer("a"))', []); + testErrorsAndWarnings('row var = abs(to_integer(true))', []); - testErrorsAndWarnings('row var = abs("a")', [ - 'Argument of [abs] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = abs(true)', [ + 'Argument of [abs] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where abs(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where abs(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where abs(stringField) > 0', [ - 'Argument of [abs] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where abs(booleanField) > 0', [ + 'Argument of [abs] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where abs(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where abs(longField) > 0', []); + testErrorsAndWarnings('from a_index | where abs(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = abs(doubleField)', []); + testErrorsAndWarnings('from a_index | eval abs(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = abs(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval abs(numberField, extraArg)', [ - 'Error: [abs] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval abs(booleanField)', [ + 'Argument of [abs] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = abs(*)', [ 'Using wildcards (*) in abs is not allowed', ]); - testErrorsAndWarnings('from a_index | sort abs(numberField)', []); - testErrorsAndWarnings('row var = abs(to_integer(true))', []); - - testErrorsAndWarnings('row var = abs(true)', [ - 'Argument of [abs] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where abs(booleanField) > 0', [ - 'Argument of [abs] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = abs(integerField)', []); + testErrorsAndWarnings('from a_index | eval abs(integerField)', []); testErrorsAndWarnings('from a_index | eval var = abs(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = abs(longField)', []); + testErrorsAndWarnings('from a_index | eval abs(longField)', []); + testErrorsAndWarnings('from a_index | eval var = abs(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval abs(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval abs(booleanField)', [ - 'Argument of [abs] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval abs(doubleField, extraArg)', [ + 'Error: [abs] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort abs(doubleField)', []); testErrorsAndWarnings('from a_index | eval abs(null)', []); testErrorsAndWarnings('row nullVar = null | eval abs(nullVar)', []); }); describe('acos', () => { + testErrorsAndWarnings('row var = acos(5.5)', []); + testErrorsAndWarnings('row acos(5.5)', []); + testErrorsAndWarnings('row var = acos(to_double(true))', []); testErrorsAndWarnings('row var = acos(5)', []); testErrorsAndWarnings('row acos(5)', []); - testErrorsAndWarnings('row var = acos(to_integer("a"))', []); + testErrorsAndWarnings('row var = acos(to_integer(true))', []); - testErrorsAndWarnings('row var = acos("a")', [ - 'Argument of [acos] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = acos(true)', [ + 'Argument of [acos] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where acos(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where acos(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where acos(stringField) > 0', [ - 'Argument of [acos] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where acos(booleanField) > 0', [ + 'Argument of [acos] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where acos(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where acos(longField) > 0', []); + testErrorsAndWarnings('from a_index | where acos(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = acos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval acos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = acos(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval acos(numberField, extraArg)', [ - 'Error: [acos] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval acos(booleanField)', [ + 'Argument of [acos] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = acos(*)', [ 'Using wildcards (*) in acos is not allowed', ]); - testErrorsAndWarnings('from a_index | sort acos(numberField)', []); - testErrorsAndWarnings('row var = acos(to_integer(true))', []); - - testErrorsAndWarnings('row var = acos(true)', [ - 'Argument of [acos] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where acos(booleanField) > 0', [ - 'Argument of [acos] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = acos(integerField)', []); + testErrorsAndWarnings('from a_index | eval acos(integerField)', []); testErrorsAndWarnings('from a_index | eval var = acos(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = acos(longField)', []); + testErrorsAndWarnings('from a_index | eval acos(longField)', []); + testErrorsAndWarnings('from a_index | eval var = acos(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval acos(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval acos(booleanField)', [ - 'Argument of [acos] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval acos(doubleField, extraArg)', [ + 'Error: [acos] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort acos(doubleField)', []); testErrorsAndWarnings('from a_index | eval acos(null)', []); testErrorsAndWarnings('row nullVar = null | eval acos(nullVar)', []); }); describe('asin', () => { + testErrorsAndWarnings('row var = asin(5.5)', []); + testErrorsAndWarnings('row asin(5.5)', []); + testErrorsAndWarnings('row var = asin(to_double(true))', []); testErrorsAndWarnings('row var = asin(5)', []); testErrorsAndWarnings('row asin(5)', []); - testErrorsAndWarnings('row var = asin(to_integer("a"))', []); + testErrorsAndWarnings('row var = asin(to_integer(true))', []); - testErrorsAndWarnings('row var = asin("a")', [ - 'Argument of [asin] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = asin(true)', [ + 'Argument of [asin] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where asin(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where asin(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where asin(stringField) > 0', [ - 'Argument of [asin] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where asin(booleanField) > 0', [ + 'Argument of [asin] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where asin(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where asin(longField) > 0', []); + testErrorsAndWarnings('from a_index | where asin(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = asin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval asin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = asin(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval asin(numberField, extraArg)', [ - 'Error: [asin] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval asin(booleanField)', [ + 'Argument of [asin] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = asin(*)', [ 'Using wildcards (*) in asin is not allowed', ]); - testErrorsAndWarnings('from a_index | sort asin(numberField)', []); - testErrorsAndWarnings('row var = asin(to_integer(true))', []); - - testErrorsAndWarnings('row var = asin(true)', [ - 'Argument of [asin] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where asin(booleanField) > 0', [ - 'Argument of [asin] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = asin(integerField)', []); + testErrorsAndWarnings('from a_index | eval asin(integerField)', []); testErrorsAndWarnings('from a_index | eval var = asin(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = asin(longField)', []); + testErrorsAndWarnings('from a_index | eval asin(longField)', []); + testErrorsAndWarnings('from a_index | eval var = asin(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval asin(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval asin(booleanField)', [ - 'Argument of [asin] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval asin(doubleField, extraArg)', [ + 'Error: [asin] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort asin(doubleField)', []); testErrorsAndWarnings('from a_index | eval asin(null)', []); testErrorsAndWarnings('row nullVar = null | eval asin(nullVar)', []); }); describe('atan', () => { + testErrorsAndWarnings('row var = atan(5.5)', []); + testErrorsAndWarnings('row atan(5.5)', []); + testErrorsAndWarnings('row var = atan(to_double(true))', []); testErrorsAndWarnings('row var = atan(5)', []); testErrorsAndWarnings('row atan(5)', []); - testErrorsAndWarnings('row var = atan(to_integer("a"))', []); + testErrorsAndWarnings('row var = atan(to_integer(true))', []); - testErrorsAndWarnings('row var = atan("a")', [ - 'Argument of [atan] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = atan(true)', [ + 'Argument of [atan] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where atan(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where atan(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where atan(stringField) > 0', [ - 'Argument of [atan] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where atan(booleanField) > 0', [ + 'Argument of [atan] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where atan(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan(longField) > 0', []); + testErrorsAndWarnings('from a_index | where atan(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = atan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = atan(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval atan(numberField, extraArg)', [ - 'Error: [atan] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval atan(booleanField)', [ + 'Argument of [atan] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = atan(*)', [ 'Using wildcards (*) in atan is not allowed', ]); - testErrorsAndWarnings('from a_index | sort atan(numberField)', []); - testErrorsAndWarnings('row var = atan(to_integer(true))', []); - - testErrorsAndWarnings('row var = atan(true)', [ - 'Argument of [atan] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where atan(booleanField) > 0', [ - 'Argument of [atan] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = atan(integerField)', []); + testErrorsAndWarnings('from a_index | eval atan(integerField)', []); testErrorsAndWarnings('from a_index | eval var = atan(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = atan(longField)', []); + testErrorsAndWarnings('from a_index | eval atan(longField)', []); + testErrorsAndWarnings('from a_index | eval var = atan(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval atan(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval atan(booleanField)', [ - 'Argument of [atan] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval atan(doubleField, extraArg)', [ + 'Error: [atan] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort atan(doubleField)', []); testErrorsAndWarnings('from a_index | eval atan(null)', []); testErrorsAndWarnings('row nullVar = null | eval atan(nullVar)', []); }); describe('atan2', () => { + testErrorsAndWarnings('row var = atan2(5.5, 5.5)', []); + testErrorsAndWarnings('row atan2(5.5, 5.5)', []); + testErrorsAndWarnings('row var = atan2(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = atan2(5.5, 5)', []); + testErrorsAndWarnings('row atan2(5.5, 5)', []); + testErrorsAndWarnings('row var = atan2(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = atan2(to_double(true), 5)', []); + testErrorsAndWarnings('row var = atan2(5, 5.5)', []); + testErrorsAndWarnings('row atan2(5, 5.5)', []); + testErrorsAndWarnings('row var = atan2(to_integer(true), to_double(true))', []); 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(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = atan2(to_integer(true), 5)', []); + testErrorsAndWarnings('row var = atan2(5, to_double(true))', []); + testErrorsAndWarnings('row var = atan2(5, to_integer(true))', []); - 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('row var = atan2(true, true)', [ + 'Argument of [atan2] must be [double], found value [true] type [boolean]', + 'Argument of [atan2] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where atan2(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(doubleField, doubleField) > 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 | where atan2(booleanField, booleanField) > 0', [ + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = atan2(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval atan2(numberField, numberField)', []); - + testErrorsAndWarnings('from a_index | where atan2(doubleField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(doubleField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(doubleField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(integerField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(integerField, longField) > 0', []); testErrorsAndWarnings( - 'from a_index | eval var = atan2(to_integer(stringField), to_integer(stringField))', + 'from a_index | where atan2(integerField, unsignedLongField) > 0', [] ); + testErrorsAndWarnings('from a_index | where atan2(longField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(longField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(longField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(unsignedLongField, doubleField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where atan2(unsignedLongField, integerField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | where atan2(unsignedLongField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where atan2(unsignedLongField, unsignedLongField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | eval var = atan2(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, doubleField)', []); - 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)', []); - testErrorsAndWarnings('row var = atan2(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_double(booleanField), to_double(booleanField))', + [] + ); - testErrorsAndWarnings('row var = atan2(true, true)', [ - 'Argument of [atan2] must be [number], found value [true] type [boolean]', - 'Argument of [atan2] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval atan2(booleanField, booleanField)', [ + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where atan2(booleanField, booleanField) > 0', [ - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = atan2(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, integerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = atan2(to_double(booleanField), to_integer(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval atan2(booleanField, booleanField)', [ - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval atan2(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval atan2(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = atan2(doubleField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_double(booleanField), longField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(doubleField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, unsignedLongField)', []); - 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)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_double(booleanField), unsignedLongField)', + [] + ); - testErrorsAndWarnings('row var = case(to_cartesianpoint("POINT (30 10)"), true)', [ - 'Argument of [case] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', - ]); - testErrorsAndWarnings('from a_index | eval case(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval case(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = atan2(integerField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(integerField, doubleField)', []); - describe('ceil', () => { - testErrorsAndWarnings('row var = ceil(5)', []); - testErrorsAndWarnings('row ceil(5)', []); - testErrorsAndWarnings('row var = ceil(to_integer("a"))', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), to_double(booleanField))', + [] + ); - testErrorsAndWarnings('row var = ceil("a")', [ - 'Argument of [ceil] must be [number], found value ["a"] type [string]', - ]); + testErrorsAndWarnings('from a_index | eval var = atan2(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval atan2(integerField, integerField)', []); - testErrorsAndWarnings('from a_index | where ceil(numberField) > 0', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))', + [] + ); - 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 = atan2(integerField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(integerField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), longField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(integerField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(integerField, unsignedLongField)', []); - 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 var = atan2(to_integer(booleanField), unsignedLongField)', + [] + ); - testErrorsAndWarnings('from a_index | eval ceil(stringField)', [ - 'Argument of [ceil] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval var = atan2(longField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, doubleField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(longField, to_double(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = atan2(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = atan2(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = atan2(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, unsignedLongField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(unsignedLongField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, to_double(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(unsignedLongField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = atan2(unsignedLongField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(unsignedLongField, longField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, unsignedLongField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval atan2(unsignedLongField, unsignedLongField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval atan2(doubleField, doubleField, extraArg)', [ + 'Error: [atan2] function expects exactly 2 arguments, got 3.', ]); - testErrorsAndWarnings('from a_index | eval ceil(numberField, extraArg)', [ - 'Error: [ceil] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | sort atan2(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval atan2(nullVar, nullVar)', []); + }); + + describe('cbrt', () => { + testErrorsAndWarnings('row var = cbrt(5.5)', []); + testErrorsAndWarnings('row cbrt(5.5)', []); + testErrorsAndWarnings('row var = cbrt(to_double(true))', []); + testErrorsAndWarnings('row var = cbrt(5)', []); + testErrorsAndWarnings('row cbrt(5)', []); + testErrorsAndWarnings('row var = cbrt(to_integer(true))', []); + + testErrorsAndWarnings('row var = cbrt(true)', [ + 'Argument of [cbrt] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = ceil(*)', [ - 'Using wildcards (*) in ceil is not allowed', + testErrorsAndWarnings('from a_index | where cbrt(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where cbrt(booleanField) > 0', [ + 'Argument of [cbrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where cbrt(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where cbrt(longField) > 0', []); + testErrorsAndWarnings('from a_index | where cbrt(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval cbrt(booleanField)', [ + 'Argument of [cbrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cbrt(*)', [ + 'Using wildcards (*) in cbrt is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = cbrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(longField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(longField)', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval cbrt(doubleField, extraArg)', [ + 'Error: [cbrt] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort ceil(numberField)', []); + testErrorsAndWarnings('from a_index | sort cbrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(null)', []); + testErrorsAndWarnings('row nullVar = null | eval cbrt(nullVar)', []); + }); + + describe('ceil', () => { + testErrorsAndWarnings('row var = ceil(5.5)', []); + testErrorsAndWarnings('row ceil(5.5)', []); + testErrorsAndWarnings('row var = ceil(to_double(true))', []); + testErrorsAndWarnings('row var = ceil(5)', []); + testErrorsAndWarnings('row ceil(5)', []); testErrorsAndWarnings('row var = ceil(to_integer(true))', []); testErrorsAndWarnings('row var = ceil(true)', [ - 'Argument of [ceil] must be [number], found value [true] type [boolean]', + 'Argument of [ceil] must be [double], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | where ceil(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where ceil(booleanField) > 0', [ - 'Argument of [ceil] must be [number], found value [booleanField] type [boolean]', + 'Argument of [ceil] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = ceil(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where ceil(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where ceil(longField) > 0', []); + testErrorsAndWarnings('from a_index | where ceil(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = ceil(doubleField)', []); + testErrorsAndWarnings('from a_index | eval ceil(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = ceil(to_double(booleanField))', []); testErrorsAndWarnings('from a_index | eval ceil(booleanField)', [ - 'Argument of [ceil] must be [number], found value [booleanField] type [boolean]', + 'Argument of [ceil] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = ceil(*)', [ + 'Using wildcards (*) in ceil is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = ceil(integerField)', []); + testErrorsAndWarnings('from a_index | eval ceil(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = ceil(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = ceil(longField)', []); + testErrorsAndWarnings('from a_index | eval ceil(longField)', []); + testErrorsAndWarnings('from a_index | eval var = ceil(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval ceil(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval ceil(doubleField, extraArg)', [ + 'Error: [ceil] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort ceil(doubleField)', []); testErrorsAndWarnings('from a_index | eval ceil(null)', []); testErrorsAndWarnings('row nullVar = null | eval ceil(nullVar)', []); }); @@ -2070,27 +2174,6 @@ describe('validation logic', () => { 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)', []); testErrorsAndWarnings( 'row var = cidr_match(to_ip(to_ip("127.0.0.1")), to_string(true))', [] @@ -2098,9 +2181,12 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = cidr_match(true, true)', [ 'Argument of [cidr_match] must be [ip], found value [true] type [boolean]', - 'Argument of [cidr_match] must be [string], found value [true] type [boolean]', + 'Argument of [cidr_match] must be [keyword], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = cidr_match(ipField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval cidr_match(ipField, keywordField)', []); + testErrorsAndWarnings( 'from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))', [] @@ -2108,181 +2194,146 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval cidr_match(booleanField, booleanField)', [ 'Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]', - 'Argument of [cidr_match] must be [string], found value [booleanField] type [boolean]', + 'Argument of [cidr_match] must be [keyword], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = cidr_match(ipField, textField)', []); + testErrorsAndWarnings('from a_index | eval cidr_match(ipField, textField)', []); + testErrorsAndWarnings('from a_index | sort cidr_match(ipField, keywordField)', []); testErrorsAndWarnings('from a_index | eval cidr_match(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval cidr_match(nullVar, nullVar)', []); }); describe('coalesce', () => { - testErrorsAndWarnings('row var = coalesce(5)', []); - testErrorsAndWarnings('row coalesce(5)', []); - testErrorsAndWarnings('row var = coalesce(to_integer(true))', []); - testErrorsAndWarnings('row var = coalesce(5, 5)', []); - testErrorsAndWarnings('row coalesce(5, 5)', []); - testErrorsAndWarnings('row var = coalesce(to_integer(true), to_integer(true))', []); - testErrorsAndWarnings('row var = coalesce(now())', []); - testErrorsAndWarnings('row coalesce(now())', []); - testErrorsAndWarnings('row var = coalesce(to_datetime(now()))', []); - testErrorsAndWarnings('row var = coalesce(now(), now())', []); - testErrorsAndWarnings('row coalesce(now(), now())', []); - testErrorsAndWarnings('row var = coalesce(to_datetime(now()), to_datetime(now()))', []); - testErrorsAndWarnings('row var = coalesce("a")', []); - testErrorsAndWarnings('row coalesce("a")', []); - testErrorsAndWarnings('row var = coalesce(to_string(true))', []); - testErrorsAndWarnings('row var = coalesce("a", "a")', []); - testErrorsAndWarnings('row coalesce("a", "a")', []); - testErrorsAndWarnings('row var = coalesce(to_string(true), to_string(true))', []); testErrorsAndWarnings('row var = coalesce(true)', []); testErrorsAndWarnings('row coalesce(true)', []); testErrorsAndWarnings('row var = coalesce(to_boolean(true))', []); testErrorsAndWarnings('row var = coalesce(true, true)', []); testErrorsAndWarnings('row coalesce(true, true)', []); testErrorsAndWarnings('row var = coalesce(to_boolean(true), to_boolean(true))', []); - testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = coalesce(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); - - testErrorsAndWarnings( - 'row var = coalesce(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', - [] - ); - - testErrorsAndWarnings('row var = coalesce(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_cartesianpoint("POINT (30 10)"))', []); - - testErrorsAndWarnings( - 'row var = coalesce(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] - ); - - testErrorsAndWarnings( - 'row var = coalesce(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('row var = coalesce(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row coalesce(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); testErrorsAndWarnings( - 'row coalesce(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] + 'row var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] ); testErrorsAndWarnings( - 'row var = coalesce(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'row var = coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', [] ); - testErrorsAndWarnings('row var = coalesce(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings( - 'row var = coalesce(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'row coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', [] ); testErrorsAndWarnings( - 'row var = coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] + 'row var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] ); testErrorsAndWarnings( - 'row coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'row var = coalesce(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', [] ); testErrorsAndWarnings( - 'row var = coalesce(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'row coalesce(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', [] ); - testErrorsAndWarnings('row var = coalesce(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = coalesce(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings( - 'row var = coalesce(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'row var = coalesce(to_datetime(to_datetime("2021-01-01T00:00:00Z")), to_datetime(to_datetime("2021-01-01T00:00:00Z")))', [] ); + testErrorsAndWarnings('row var = coalesce(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row coalesce(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); testErrorsAndWarnings( - 'row coalesce(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] + 'row var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] ); testErrorsAndWarnings( - 'row var = coalesce(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'row var = coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', [] ); - testErrorsAndWarnings('row var = coalesce(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = coalesce(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings( - 'row var = coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'row coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', [] ); testErrorsAndWarnings( - 'row coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] + 'row var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] ); + testErrorsAndWarnings('row var = coalesce(5)', []); + testErrorsAndWarnings('row coalesce(5)', []); + testErrorsAndWarnings('row var = coalesce(to_integer(true))', []); + testErrorsAndWarnings('row var = coalesce(5, 5)', []); + testErrorsAndWarnings('row coalesce(5, 5)', []); + testErrorsAndWarnings('row var = coalesce(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings( - 'row var = coalesce(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'row var = coalesce(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', [] ); - testErrorsAndWarnings('row var = coalesce(to_version("1.0.0"))', []); - testErrorsAndWarnings('row coalesce(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = coalesce(to_version("a"))', []); + testErrorsAndWarnings('row var = coalesce("a")', []); + testErrorsAndWarnings('row coalesce("a")', []); + testErrorsAndWarnings('row var = coalesce(to_string(true))', []); + testErrorsAndWarnings('row var = coalesce("a", "a")', []); + testErrorsAndWarnings('row coalesce("a", "a")', []); + testErrorsAndWarnings('row var = coalesce(to_string(true), to_string(true))', []); testErrorsAndWarnings('row var = coalesce(to_version("1.0.0"), to_version("1.0.0"))', []); testErrorsAndWarnings('row coalesce(to_version("1.0.0"), to_version("1.0.0"))', []); testErrorsAndWarnings('row var = coalesce(to_version("a"), to_version("a"))', []); - testErrorsAndWarnings('from a_index | where coalesce(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where coalesce(numberField, numberField) > 0', []); - testErrorsAndWarnings('from a_index | where length(coalesce(stringField)) > 0', []); - testErrorsAndWarnings( - 'from a_index | where length(coalesce(stringField, stringField)) > 0', - [] - ); - testErrorsAndWarnings('from a_index | eval var = coalesce(numberField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(numberField, numberField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('row var = coalesce(5.5, 5.5)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(dateField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(dateField, dateField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | where coalesce(integerField) > 0', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))', - [] - ); + testErrorsAndWarnings('from a_index | where coalesce(counterDoubleField) > 0', [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); - testErrorsAndWarnings('from a_index | eval var = coalesce(stringField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | where coalesce(integerField, integerField) > 0', []); testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | where coalesce(counterDoubleField, counterDoubleField) > 0', + [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ] ); + testErrorsAndWarnings('from a_index | where coalesce(longField) > 0', []); + testErrorsAndWarnings('from a_index | where coalesce(longField, longField) > 0', []); testErrorsAndWarnings('from a_index | eval var = coalesce(booleanField)', []); testErrorsAndWarnings('from a_index | eval coalesce(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = coalesce(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval coalesce(counterDoubleField)', [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + testErrorsAndWarnings('from a_index | eval var = coalesce(booleanField, booleanField)', []); testErrorsAndWarnings('from a_index | eval coalesce(booleanField, booleanField)', []); @@ -2291,21 +2342,12 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(ipField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(ipField, ipField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(ipField, ipField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))', - [] - ); - testErrorsAndWarnings('from a_index | eval var = coalesce(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(cartesianPointField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | eval coalesce(counterDoubleField, counterDoubleField)', + [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ] ); testErrorsAndWarnings( @@ -2323,32 +2365,29 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(cartesianShapeField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)', [] ); testErrorsAndWarnings( - 'from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', [] ); + testErrorsAndWarnings('from a_index | eval var = coalesce(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(dateField, dateField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))', [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_geopoint(geoPointField))', []); testErrorsAndWarnings( 'from a_index | eval var = coalesce(geoPointField, geoPointField)', [] @@ -2360,9 +2399,6 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_geoshape(geoPointField))', []); testErrorsAndWarnings( 'from a_index | eval var = coalesce(geoShapeField, geoShapeField)', [] @@ -2374,71 +2410,73 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(versionField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_version(stringField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(versionField, versionField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(versionField, versionField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(integerField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(integerField, integerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_version(stringField), to_version(stringField))', + 'from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))', [] ); - testErrorsAndWarnings('from a_index | sort coalesce(numberField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(null)', []); - testErrorsAndWarnings('row nullVar = null | eval coalesce(nullVar)', []); - testErrorsAndWarnings('from a_index | sort coalesce(booleanField)', []); - }); + testErrorsAndWarnings('from a_index | eval var = coalesce(ipField, ipField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(ipField, ipField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = coalesce(keywordField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(keywordField, keywordField)', []); - describe('concat', () => { - testErrorsAndWarnings('row var = concat("a", "a")', []); - testErrorsAndWarnings('row concat("a", "a")', []); - testErrorsAndWarnings('row var = concat(to_string("a"), to_string("a"))', []); + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))', + [] + ); - testErrorsAndWarnings('row var = concat(5, 5)', [ - 'Argument of [concat] must be [string], found value [5] type [number]', - 'Argument of [concat] must be [string], found value [5] type [number]', - ]); + testErrorsAndWarnings('from a_index | eval var = coalesce(longField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(longField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(textField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(textField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(versionField, versionField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | where length(concat(stringField, stringField)) > 0', + 'from a_index | eval var = coalesce(to_version(keywordField), to_version(keywordField))', [] ); - testErrorsAndWarnings('from a_index | where length(concat(numberField, numberField)) > 0', [ - 'Argument of [concat] must be [string], found value [numberField] type [number]', - 'Argument of [concat] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval var = concat(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval concat(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | sort coalesce(booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(null)', []); + testErrorsAndWarnings('row nullVar = null | eval coalesce(nullVar)', []); + testErrorsAndWarnings('from a_index | eval coalesce("2022", "2022")', []); testErrorsAndWarnings( - 'from a_index | eval var = concat(to_string(stringField), to_string(stringField))', + 'from a_index | eval coalesce(concat("20", "22"), concat("20", "22"))', [] ); + }); - testErrorsAndWarnings('from a_index | eval concat(numberField, numberField)', [ - 'Argument of [concat] must be [string], found value [numberField] type [number]', - 'Argument of [concat] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | sort concat(stringField, stringField)', []); + describe('concat', () => { + testErrorsAndWarnings('row var = concat("a", "a")', []); + testErrorsAndWarnings('row concat("a", "a")', []); testErrorsAndWarnings('row var = concat(to_string(true), to_string(true))', []); testErrorsAndWarnings('row var = concat(true, true)', [ - 'Argument of [concat] must be [string], found value [true] type [boolean]', - 'Argument of [concat] must be [string], found value [true] type [boolean]', + 'Argument of [concat] must be [keyword], found value [true] type [boolean]', + 'Argument of [concat] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings( - 'from a_index | where length(concat(booleanField, booleanField)) > 0', - [ - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval var = concat(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval concat(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))', @@ -2446,169 +2484,245 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval concat(booleanField, booleanField)', [ - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [concat] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [concat] must be [keyword], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = concat(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval concat(textField, textField)', []); + testErrorsAndWarnings('from a_index | sort concat(keywordField, keywordField)', []); testErrorsAndWarnings('from a_index | eval concat(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval concat(nullVar, nullVar)', []); }); describe('cos', () => { + testErrorsAndWarnings('row var = cos(5.5)', []); + testErrorsAndWarnings('row cos(5.5)', []); + testErrorsAndWarnings('row var = cos(to_double(true))', []); testErrorsAndWarnings('row var = cos(5)', []); testErrorsAndWarnings('row cos(5)', []); - testErrorsAndWarnings('row var = cos(to_integer("a"))', []); + testErrorsAndWarnings('row var = cos(to_integer(true))', []); - testErrorsAndWarnings('row var = cos("a")', [ - 'Argument of [cos] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = cos(true)', [ + 'Argument of [cos] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where cos(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where cos(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where cos(stringField) > 0', [ - 'Argument of [cos] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where cos(booleanField) > 0', [ + 'Argument of [cos] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where cos(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where cos(longField) > 0', []); + testErrorsAndWarnings('from a_index | where cos(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = cos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = cos(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval cos(numberField, extraArg)', [ - 'Error: [cos] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval cos(booleanField)', [ + 'Argument of [cos] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = cos(*)', [ 'Using wildcards (*) in cos is not allowed', ]); - testErrorsAndWarnings('from a_index | sort cos(numberField)', []); - testErrorsAndWarnings('row var = cos(to_integer(true))', []); - - testErrorsAndWarnings('row var = cos(true)', [ - 'Argument of [cos] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where cos(booleanField) > 0', [ - 'Argument of [cos] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = cos(integerField)', []); + testErrorsAndWarnings('from a_index | eval cos(integerField)', []); testErrorsAndWarnings('from a_index | eval var = cos(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = cos(longField)', []); + testErrorsAndWarnings('from a_index | eval cos(longField)', []); + testErrorsAndWarnings('from a_index | eval var = cos(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval cos(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval cos(booleanField)', [ - 'Argument of [cos] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval cos(doubleField, extraArg)', [ + 'Error: [cos] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort cos(doubleField)', []); testErrorsAndWarnings('from a_index | eval cos(null)', []); testErrorsAndWarnings('row nullVar = null | eval cos(nullVar)', []); }); describe('cosh', () => { + testErrorsAndWarnings('row var = cosh(5.5)', []); + testErrorsAndWarnings('row cosh(5.5)', []); + testErrorsAndWarnings('row var = cosh(to_double(true))', []); testErrorsAndWarnings('row var = cosh(5)', []); testErrorsAndWarnings('row cosh(5)', []); - testErrorsAndWarnings('row var = cosh(to_integer("a"))', []); + testErrorsAndWarnings('row var = cosh(to_integer(true))', []); - testErrorsAndWarnings('row var = cosh("a")', [ - 'Argument of [cosh] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = cosh(true)', [ + 'Argument of [cosh] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where cosh(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where cosh(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where cosh(stringField) > 0', [ - 'Argument of [cosh] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where cosh(booleanField) > 0', [ + 'Argument of [cosh] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where cosh(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where cosh(longField) > 0', []); + testErrorsAndWarnings('from a_index | where cosh(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = cosh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cosh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = cosh(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval cosh(numberField, extraArg)', [ - 'Error: [cosh] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval cosh(booleanField)', [ + 'Argument of [cosh] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = cosh(*)', [ 'Using wildcards (*) in cosh is not allowed', ]); - testErrorsAndWarnings('from a_index | sort cosh(numberField)', []); - testErrorsAndWarnings('row var = cosh(to_integer(true))', []); - - testErrorsAndWarnings('row var = cosh(true)', [ - 'Argument of [cosh] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where cosh(booleanField) > 0', [ - 'Argument of [cosh] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = cosh(integerField)', []); + testErrorsAndWarnings('from a_index | eval cosh(integerField)', []); testErrorsAndWarnings('from a_index | eval var = cosh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = cosh(longField)', []); + testErrorsAndWarnings('from a_index | eval cosh(longField)', []); + testErrorsAndWarnings('from a_index | eval var = cosh(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval cosh(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval cosh(booleanField)', [ - 'Argument of [cosh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval cosh(doubleField, extraArg)', [ + 'Error: [cosh] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort cosh(doubleField)', []); testErrorsAndWarnings('from a_index | eval cosh(null)', []); testErrorsAndWarnings('row nullVar = null | eval cosh(nullVar)', []); }); - 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())', []); + describe('date_diff', () => { testErrorsAndWarnings( - 'from a_index | eval date_extract("SOME_RANDOM_STRING", now())', - [], + '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(dateField), to_datetime(dateField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_diff(booleanField, booleanField, booleanField)', [ - 'Invalid option ["SOME_RANDOM_STRING"] for date_extract. Supported options: ["ALIGNED_DAY_OF_WEEK_IN_MONTH", "ALIGNED_DAY_OF_WEEK_IN_YEAR", "ALIGNED_WEEK_OF_MONTH", "ALIGNED_WEEK_OF_YEAR", "AMPM_OF_DAY", "CLOCK_HOUR_OF_AMPM", "CLOCK_HOUR_OF_DAY", "DAY_OF_MONTH", "DAY_OF_WEEK", "DAY_OF_YEAR", "EPOCH_DAY", "ERA", "HOUR_OF_AMPM", "HOUR_OF_DAY", "INSTANT_SECONDS", "MICRO_OF_DAY", "MICRO_OF_SECOND", "MILLI_OF_DAY", "MILLI_OF_SECOND", "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "NANO_OF_DAY", "NANO_OF_SECOND", "OFFSET_SECONDS", "PROLEPTIC_MONTH", "SECOND_OF_DAY", "SECOND_OF_MINUTE", "YEAR", "YEAR_OF_ERA"].', + 'Argument of [date_diff] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', + 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', ] ); testErrorsAndWarnings( - 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + 'from a_index | eval var = date_diff(textField, dateField, dateField)', [] ); + testErrorsAndWarnings('from a_index | eval date_diff(textField, dateField, dateField)', []); + testErrorsAndWarnings( - 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + 'from a_index | eval var = date_diff(to_string(booleanField), to_datetime(dateField), to_datetime(dateField))', [] ); testErrorsAndWarnings( - 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime(stringField))', - [] + 'from a_index | eval date_diff("year", dateField, dateField, extraArg)', + ['Error: [date_diff] function expects exactly 3 arguments, got 4.'] ); - testErrorsAndWarnings('from a_index | eval date_extract(stringField, stringField)', [ - 'Argument of [date_extract] must be [date], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | sort date_diff("year", dateField, dateField)', []); + + testErrorsAndWarnings('from a_index | eval date_diff(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | eval date_diff("year", "2022", "2022")', []); 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.'] + 'from a_index | eval date_diff("year", concat("20", "22"), concat("20", "22"))', + [ + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + ] ); + testErrorsAndWarnings('from a_index | eval date_diff(textField, "2022", "2022")', []); + testErrorsAndWarnings( - 'from a_index | sort date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + 'from a_index | eval date_diff(textField, concat("20", "22"), concat("20", "22"))', + [ + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + ] + ); + }); + + describe('date_extract', () => { + testErrorsAndWarnings( + 'row var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime("2021-01-01T00:00:00Z"))', + [] + ); + + testErrorsAndWarnings( + 'row date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime("2021-01-01T00:00:00Z"))', + [] + ); + + testErrorsAndWarnings( + 'row var = date_extract("a", to_datetime("2021-01-01T00:00:00Z"))', [] ); + testErrorsAndWarnings('row date_extract("a", to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings('row var = date_extract(true, true)', [ - 'Argument of [date_extract] must be [string], found value [true] type [boolean]', + 'Argument of [date_extract] must be [keyword], found value [true] type [boolean]', 'Argument of [date_extract] must be [date], found value [true] type [boolean]', ]); + testErrorsAndWarnings( + 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", 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(dateField))', [] ); testErrorsAndWarnings('from a_index | eval date_extract(booleanField, booleanField)', [ - 'Argument of [date_extract] must be [string], found value [booleanField] type [boolean]', + 'Argument of [date_extract] must be [keyword], found value [booleanField] type [boolean]', 'Argument of [date_extract] must be [date], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = date_extract(textField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_extract(textField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_extract(to_string(booleanField), to_datetime(dateField))', + [] + ); + + 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)', + [] + ); + testErrorsAndWarnings('from a_index | eval date_extract(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_extract(nullVar, nullVar)', []); @@ -2620,134 +2734,128 @@ describe('validation logic', () => { testErrorsAndWarnings( 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", concat("20", "22"))', [ - 'Argument of [date_extract] must be [date], found value [concat("20","22")] type [string]', + 'Argument of [date_extract] must be [date], found value [concat("20","22")] type [keyword]', ] ); + + testErrorsAndWarnings('from a_index | eval date_extract(textField, "2022")', []); + testErrorsAndWarnings('from a_index | eval date_extract(textField, concat("20", "22"))', [ + 'Argument of [date_extract] must be [date], found value [concat("20","22")] type [keyword]', + ]); }); describe('date_format', () => { - testErrorsAndWarnings('row var = date_format("a", now())', []); - testErrorsAndWarnings('row date_format("a", now())', []); - testErrorsAndWarnings('from a_index | eval var = date_format(stringField, dateField)', []); - testErrorsAndWarnings('from a_index | eval date_format(stringField, dateField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = date_format(to_string(stringField), to_datetime(stringField))', + 'row var = date_format("a", to_datetime("2021-01-01T00:00:00Z"))', [] ); - - testErrorsAndWarnings('from a_index | eval date_format(stringField, numberField)', [ - 'Argument of [date_format] must be [date], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval date_format(stringField, dateField, extraArg)', [ - 'Error: [date_format] function expects no more than 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort date_format(stringField, dateField)', []); + testErrorsAndWarnings('row date_format("a", to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings('row var = date_format(true, true)', [ - 'Argument of [date_format] must be [string], found value [true] type [boolean]', + 'Argument of [date_format] must be [keyword], found value [true] type [boolean]', 'Argument of [date_format] must be [date], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = date_format(keywordField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_format(keywordField, dateField)', []); + testErrorsAndWarnings( 'from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))', [] ); testErrorsAndWarnings('from a_index | eval date_format(booleanField, booleanField)', [ - 'Argument of [date_format] must be [string], found value [booleanField] type [boolean]', + 'Argument of [date_format] must be [keyword], found value [booleanField] type [boolean]', 'Argument of [date_format] must be [date], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = date_format(textField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_format(textField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval date_format(keywordField, dateField, extraArg)', + ['Error: [date_format] function expects no more than 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort date_format(keywordField, dateField)', []); testErrorsAndWarnings('from a_index | eval date_format(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_format(nullVar, nullVar)', []); - testErrorsAndWarnings('from a_index | eval date_format(stringField, "2022")', []); - testErrorsAndWarnings('from a_index | eval date_format(stringField, concat("20", "22"))', [ - 'Argument of [date_format] must be [date], found value [concat("20","22")] type [string]', + testErrorsAndWarnings('from a_index | eval date_format(keywordField, "2022")', []); + + testErrorsAndWarnings('from a_index | eval date_format(keywordField, concat("20", "22"))', [ + 'Argument of [date_format] must be [date], found value [concat("20","22")] type [keyword]', + ]); + + testErrorsAndWarnings('from a_index | eval date_format(textField, "2022")', []); + testErrorsAndWarnings('from a_index | eval date_format(textField, concat("20", "22"))', [ + 'Argument of [date_format] must be [date], found value [concat("20","22")] type [keyword]', ]); }); describe('date_parse', () => { testErrorsAndWarnings('row var = date_parse("a", "a")', []); - testErrorsAndWarnings('row var = date_parse("a")', []); testErrorsAndWarnings('row date_parse("a", "a")', []); - testErrorsAndWarnings('row var = date_parse(to_string("a"), to_string("a"))', []); + testErrorsAndWarnings('row var = date_parse(to_string(true), to_string(true))', []); - 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('row var = date_parse(true, true)', [ + 'Argument of [date_parse] must be [keyword], found value [true] type [boolean]', + 'Argument of [date_parse] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = date_parse(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = date_parse(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval date_parse(stringField, stringField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))', + 'from a_index | eval var = date_parse(keywordField, keywordField)', [] ); - - 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(keywordField, keywordField)', []); testErrorsAndWarnings( - 'from a_index | eval date_parse(stringField, stringField, extraArg)', - ['Error: [date_parse] function expects no more than 2 arguments, got 3.'] + 'from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))', + [] ); - testErrorsAndWarnings('from a_index | sort date_parse(stringField, stringField)', []); - testErrorsAndWarnings('row var = date_parse(to_string(true), to_string(true))', []); - - testErrorsAndWarnings('row var = date_parse(true, true)', [ - 'Argument of [date_parse] must be [string], found value [true] type [boolean]', - 'Argument of [date_parse] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval date_parse(booleanField, booleanField)', [ + 'Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = date_parse(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval date_parse(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = date_parse(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval date_parse(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = date_parse(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval date_parse(textField, textField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | eval date_parse(keywordField, keywordField, extraArg)', + ['Error: [date_parse] function expects no more than 2 arguments, got 3.'] ); - testErrorsAndWarnings('from a_index | eval date_parse(booleanField, booleanField)', [ - 'Argument of [date_parse] must be [string], found value [booleanField] type [boolean]', - 'Argument of [date_parse] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | sort date_parse(keywordField, keywordField)', []); testErrorsAndWarnings('from a_index | eval date_parse(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_parse(nullVar, nullVar)', []); }); 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))', + 'row var = date_trunc(1 year, to_datetime("2021-01-01T00:00:00Z"))', [] ); - - 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('row date_trunc(1 year, to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = date_trunc("a", to_datetime("2021-01-01T00:00:00Z"))', [ + 'Argument of [date_trunc] must be [time_literal], found value ["a"] type [string]', ]); - - testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField, extraArg)', [ - 'Error: [date_trunc] function expects exactly 2 arguments, got 3.', + testErrorsAndWarnings('row date_trunc("a", to_datetime("2021-01-01T00:00:00Z"))', [ + 'Argument of [date_trunc] must be [time_literal], found value ["a"] type [string]', ]); - testErrorsAndWarnings('from a_index | sort date_trunc(1 year, dateField)', []); - testErrorsAndWarnings('row var = date_trunc(now(), now())', []); - testErrorsAndWarnings('row date_trunc(now(), now())', []); - testErrorsAndWarnings('row var = date_trunc(true, true)', [ 'Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]', 'Argument of [date_trunc] must be [date], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = date_trunc(1 year, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField)', []); + testErrorsAndWarnings( 'from a_index | eval var = date_trunc(1 year, to_datetime(dateField))', [] @@ -2758,28 +2866,36 @@ describe('validation logic', () => { 'Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = date_trunc(dateField, dateField)', []); - testErrorsAndWarnings('from a_index | eval date_trunc(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | eval var = date_trunc(textField, dateField)', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + ]); + testErrorsAndWarnings('from a_index | eval date_trunc(textField, dateField)', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = date_trunc(to_datetime(dateField), to_datetime(dateField))', - [] + 'from a_index | eval var = date_trunc(textField, to_datetime(dateField))', + ['Argument of [date_trunc] must be [time_literal], found value [textField] type [text]'] ); + + 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)', []); testErrorsAndWarnings('from a_index | eval date_trunc(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_trunc(nullVar, nullVar)', []); testErrorsAndWarnings('from a_index | eval date_trunc(1 year, "2022")', []); testErrorsAndWarnings('from a_index | eval date_trunc(1 year, concat("20", "22"))', [ - 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [string]', + 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [keyword]', + ]); + testErrorsAndWarnings('from a_index | eval date_trunc(textField, "2022")', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + ]); + testErrorsAndWarnings('from a_index | eval date_trunc(textField, concat("20", "22"))', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [keyword]', ]); - testErrorsAndWarnings('from a_index | eval date_trunc("2022", "2022")', []); - - testErrorsAndWarnings( - 'from a_index | eval date_trunc(concat("20", "22"), concat("20", "22"))', - [ - 'Argument of [date_trunc] must be [time_literal], found value [concat("20","22")] type [string]', - 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [string]', - ] - ); }); describe('e', () => { @@ -2800,37 +2916,18 @@ describe('validation logic', () => { 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(to_string(true), to_string(true))', []); - 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('row var = ends_with(true, true)', [ + 'Argument of [ends_with] must be [keyword], found value [true] type [boolean]', + 'Argument of [ends_with] must be [keyword], found value [true] type [boolean]', ]); - 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))', + 'from a_index | eval var = ends_with(keywordField, keywordField)', [] ); - - 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)', []); - testErrorsAndWarnings('row var = ends_with(to_string(true), to_string(true))', []); - - testErrorsAndWarnings('row var = ends_with(true, true)', [ - 'Argument of [ends_with] must be [string], found value [true] type [boolean]', - 'Argument of [ends_with] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval ends_with(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))', @@ -2838,82 +2935,172 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval ends_with(booleanField, booleanField)', [ - 'Argument of [ends_with] must be [string], found value [booleanField] type [boolean]', - 'Argument of [ends_with] must be [string], found value [booleanField] type [boolean]', + 'Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = ends_with(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval ends_with(textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval ends_with(keywordField, keywordField, extraArg)', + ['Error: [ends_with] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort ends_with(keywordField, keywordField)', []); testErrorsAndWarnings('from a_index | eval ends_with(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval ends_with(nullVar, nullVar)', []); }); - describe('floor', () => { - testErrorsAndWarnings('row var = floor(5)', []); - testErrorsAndWarnings('row floor(5)', []); - testErrorsAndWarnings('row var = floor(to_integer("a"))', []); + describe('exp', () => { + testErrorsAndWarnings('row var = exp(5.5)', []); + testErrorsAndWarnings('row exp(5.5)', []); + testErrorsAndWarnings('row var = exp(to_double(true))', []); + testErrorsAndWarnings('row var = exp(5)', []); + testErrorsAndWarnings('row exp(5)', []); + testErrorsAndWarnings('row var = exp(to_integer(true))', []); - testErrorsAndWarnings('row var = floor("a")', [ - 'Argument of [floor] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = exp(true)', [ + 'Argument of [exp] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where floor(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where exp(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where floor(stringField) > 0', [ - 'Argument of [floor] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where exp(booleanField) > 0', [ + 'Argument of [exp] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where exp(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where exp(longField) > 0', []); + testErrorsAndWarnings('from a_index | where exp(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = exp(doubleField)', []); + testErrorsAndWarnings('from a_index | eval exp(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = exp(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval floor(stringField)', [ - 'Argument of [floor] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval exp(booleanField)', [ + 'Argument of [exp] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval floor(numberField, extraArg)', [ - 'Error: [floor] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = exp(*)', [ + 'Using wildcards (*) in exp is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = floor(*)', [ - 'Using wildcards (*) in floor is not allowed', + testErrorsAndWarnings('from a_index | eval var = exp(integerField)', []); + testErrorsAndWarnings('from a_index | eval exp(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = exp(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = exp(longField)', []); + testErrorsAndWarnings('from a_index | eval exp(longField)', []); + testErrorsAndWarnings('from a_index | eval var = exp(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval exp(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval exp(doubleField, extraArg)', [ + 'Error: [exp] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort floor(numberField)', []); + testErrorsAndWarnings('from a_index | sort exp(doubleField)', []); + testErrorsAndWarnings('from a_index | eval exp(null)', []); + testErrorsAndWarnings('row nullVar = null | eval exp(nullVar)', []); + }); + + describe('floor', () => { + testErrorsAndWarnings('row var = floor(5.5)', []); + testErrorsAndWarnings('row floor(5.5)', []); + testErrorsAndWarnings('row var = floor(to_double(true))', []); + testErrorsAndWarnings('row var = floor(5)', []); + testErrorsAndWarnings('row floor(5)', []); testErrorsAndWarnings('row var = floor(to_integer(true))', []); testErrorsAndWarnings('row var = floor(true)', [ - 'Argument of [floor] must be [number], found value [true] type [boolean]', + 'Argument of [floor] must be [double], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | where floor(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where floor(booleanField) > 0', [ - 'Argument of [floor] must be [number], found value [booleanField] type [boolean]', + 'Argument of [floor] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = floor(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where floor(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where floor(longField) > 0', []); + testErrorsAndWarnings('from a_index | where floor(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = floor(doubleField)', []); + testErrorsAndWarnings('from a_index | eval floor(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = floor(to_double(booleanField))', []); testErrorsAndWarnings('from a_index | eval floor(booleanField)', [ - 'Argument of [floor] must be [number], found value [booleanField] type [boolean]', + 'Argument of [floor] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = floor(*)', [ + 'Using wildcards (*) in floor is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = floor(integerField)', []); + testErrorsAndWarnings('from a_index | eval floor(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = floor(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = floor(longField)', []); + testErrorsAndWarnings('from a_index | eval floor(longField)', []); + testErrorsAndWarnings('from a_index | eval var = floor(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval floor(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval floor(doubleField, extraArg)', [ + 'Error: [floor] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort floor(doubleField)', []); testErrorsAndWarnings('from a_index | eval floor(null)', []); testErrorsAndWarnings('row nullVar = null | eval floor(nullVar)', []); }); + describe('from_base64', () => { + testErrorsAndWarnings('row var = from_base64("a")', []); + testErrorsAndWarnings('row from_base64("a")', []); + testErrorsAndWarnings('row var = from_base64(to_string(true))', []); + + testErrorsAndWarnings('row var = from_base64(true)', [ + 'Argument of [from_base64] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval from_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = from_base64(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval from_base64(booleanField)', [ + 'Argument of [from_base64] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(*)', [ + 'Using wildcards (*) in from_base64 is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(textField)', []); + testErrorsAndWarnings('from a_index | eval from_base64(textField)', []); + + testErrorsAndWarnings('from a_index | eval from_base64(keywordField, extraArg)', [ + 'Error: [from_base64] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort from_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval from_base64(null)', []); + testErrorsAndWarnings('row nullVar = null | eval from_base64(nullVar)', []); + }); + 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)', []); testErrorsAndWarnings('row var = greatest(true)', []); testErrorsAndWarnings('row greatest(true)', []); testErrorsAndWarnings('row var = greatest(to_boolean(true))', []); testErrorsAndWarnings('row var = greatest(true, true)', []); testErrorsAndWarnings('row greatest(true, true)', []); testErrorsAndWarnings('row var = greatest(to_boolean(true), to_boolean(true))', []); - testErrorsAndWarnings('row var = greatest(5, 5)', []); - testErrorsAndWarnings('row greatest(5, 5)', []); - testErrorsAndWarnings('row var = greatest(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = greatest(5.5, 5.5)', []); + testErrorsAndWarnings('row greatest(5.5, 5.5)', []); + testErrorsAndWarnings('row var = greatest(to_double(true), to_double(true))', []); testErrorsAndWarnings('row var = greatest(5)', []); testErrorsAndWarnings('row greatest(5)', []); testErrorsAndWarnings('row var = greatest(to_integer(true))', []); + testErrorsAndWarnings('row var = greatest(5, 5)', []); + testErrorsAndWarnings('row greatest(5, 5)', []); + testErrorsAndWarnings('row var = greatest(to_integer(true), to_integer(true))', []); testErrorsAndWarnings('row var = greatest(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings('row greatest(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); @@ -2922,6 +3109,8 @@ describe('validation logic', () => { [] ); + testErrorsAndWarnings('row var = greatest("a")', []); + testErrorsAndWarnings('row greatest("a")', []); testErrorsAndWarnings('row var = greatest(to_string(true))', []); testErrorsAndWarnings('row var = greatest("a", "a")', []); testErrorsAndWarnings('row greatest("a", "a")', []); @@ -2938,41 +3127,17 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | where greatest(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(doubleField, doubleField) > 0', []); - testErrorsAndWarnings( - 'from a_index | where greatest(cartesianPointField, cartesianPointField) > 0', - [ - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ] - ); - - testErrorsAndWarnings('from a_index | where greatest(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(integerField) > 0', []); testErrorsAndWarnings('from a_index | where greatest(cartesianPointField) > 0', [ 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where length(greatest(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | where length(greatest(cartesianPointField)) > 0', [ - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings( - 'from a_index | where length(greatest(stringField, stringField)) > 0', - [] - ); - - testErrorsAndWarnings( - 'from a_index | where length(greatest(cartesianPointField, cartesianPointField)) > 0', - [ - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ] - ); - + testErrorsAndWarnings('from a_index | where greatest(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(longField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(longField, longField) > 0', []); testErrorsAndWarnings('from a_index | eval var = greatest(booleanField)', []); testErrorsAndWarnings('from a_index | eval greatest(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(to_boolean(booleanField))', []); @@ -2997,37 +3162,55 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | eval var = greatest(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval greatest(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval greatest(doubleField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = greatest(to_double(booleanField), to_double(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval var = greatest(numberField)', []); - testErrorsAndWarnings('from a_index | eval greatest(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(integerField)', []); + testErrorsAndWarnings('from a_index | eval greatest(integerField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = greatest(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval greatest(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = greatest(ipField, ipField)', []); testErrorsAndWarnings('from a_index | eval greatest(ipField, ipField)', []); testErrorsAndWarnings( 'from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))', [] ); + testErrorsAndWarnings('from a_index | eval var = greatest(keywordField)', []); + testErrorsAndWarnings('from a_index | eval greatest(keywordField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = greatest(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval greatest(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval greatest(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))', [] ); + testErrorsAndWarnings('from a_index | eval var = greatest(longField)', []); + testErrorsAndWarnings('from a_index | eval greatest(longField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval greatest(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(textField)', []); + testErrorsAndWarnings('from a_index | eval greatest(textField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval greatest(textField, textField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(versionField, versionField)', []); testErrorsAndWarnings('from a_index | eval greatest(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | eval var = greatest(to_version(stringField), to_version(stringField))', + 'from a_index | eval var = greatest(to_version(keywordField), to_version(keywordField))', [] ); @@ -3036,24 +3219,74 @@ describe('validation logic', () => { testErrorsAndWarnings('row nullVar = null | eval greatest(nullVar)', []); }); + describe('ip_prefix', () => { + testErrorsAndWarnings('row var = ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); + testErrorsAndWarnings('row ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = ip_prefix(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = ip_prefix(true, true, true)', [ + 'Argument of [ip_prefix] must be [ip], found value [true] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [true] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = ip_prefix(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval ip_prefix(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval ip_prefix(booleanField, booleanField, booleanField)', + [ + 'Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval ip_prefix(ipField, integerField, integerField, extraArg)', + ['Error: [ip_prefix] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort ip_prefix(ipField, integerField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval ip_prefix(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)', []); + }); + 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)', []); testErrorsAndWarnings('row var = least(true)', []); testErrorsAndWarnings('row least(true)', []); testErrorsAndWarnings('row var = least(to_boolean(true))', []); testErrorsAndWarnings('row var = least(true, true)', []); testErrorsAndWarnings('row least(true, true)', []); testErrorsAndWarnings('row var = least(to_boolean(true), to_boolean(true))', []); - testErrorsAndWarnings('row var = least(5, 5)', []); - testErrorsAndWarnings('row least(5, 5)', []); - testErrorsAndWarnings('row var = least(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = least(5.5, 5.5)', []); + testErrorsAndWarnings('row least(5.5, 5.5)', []); + testErrorsAndWarnings('row var = least(to_double(true), to_double(true))', []); testErrorsAndWarnings('row var = least(5)', []); testErrorsAndWarnings('row least(5)', []); testErrorsAndWarnings('row var = least(to_integer(true))', []); + testErrorsAndWarnings('row var = least(5, 5)', []); + testErrorsAndWarnings('row least(5, 5)', []); + testErrorsAndWarnings('row var = least(to_integer(true), to_integer(true))', []); testErrorsAndWarnings('row var = least(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings('row least(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); @@ -3062,6 +3295,8 @@ describe('validation logic', () => { [] ); + testErrorsAndWarnings('row var = least("a")', []); + testErrorsAndWarnings('row least("a")', []); testErrorsAndWarnings('row var = least(to_string(true))', []); testErrorsAndWarnings('row var = least("a", "a")', []); testErrorsAndWarnings('row least("a", "a")', []); @@ -3078,7 +3313,7 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | where least(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | where least(doubleField, doubleField) > 0', []); testErrorsAndWarnings( 'from a_index | where least(cartesianPointField, cartesianPointField) > 0', @@ -3088,31 +3323,15 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | where least(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where least(integerField) > 0', []); testErrorsAndWarnings('from a_index | where least(cartesianPointField) > 0', [ 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where length(least(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | where length(least(cartesianPointField)) > 0', [ - 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings( - 'from a_index | where length(least(stringField, stringField)) > 0', - [] - ); - - testErrorsAndWarnings( - 'from a_index | where length(least(cartesianPointField, cartesianPointField)) > 0', - [ - 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ] - ); - + testErrorsAndWarnings('from a_index | where least(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where least(longField) > 0', []); + testErrorsAndWarnings('from a_index | where least(longField, longField) > 0', []); testErrorsAndWarnings('from a_index | eval var = least(booleanField)', []); testErrorsAndWarnings('from a_index | eval least(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = least(to_boolean(booleanField))', []); @@ -3137,37 +3356,55 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | eval var = least(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval least(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval var = least(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval least(doubleField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = least(to_double(booleanField), to_double(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval var = least(numberField)', []); - testErrorsAndWarnings('from a_index | eval least(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = least(integerField)', []); + testErrorsAndWarnings('from a_index | eval least(integerField)', []); testErrorsAndWarnings('from a_index | eval var = least(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = least(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval least(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = least(ipField, ipField)', []); testErrorsAndWarnings('from a_index | eval least(ipField, ipField)', []); testErrorsAndWarnings( 'from a_index | eval var = least(to_ip(ipField), to_ip(ipField))', [] ); + testErrorsAndWarnings('from a_index | eval var = least(keywordField)', []); + testErrorsAndWarnings('from a_index | eval least(keywordField)', []); testErrorsAndWarnings('from a_index | eval var = least(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = least(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval least(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval var = least(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval least(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = least(to_string(booleanField), to_string(booleanField))', [] ); + testErrorsAndWarnings('from a_index | eval var = least(longField)', []); + testErrorsAndWarnings('from a_index | eval least(longField)', []); + testErrorsAndWarnings('from a_index | eval var = least(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval least(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = least(textField)', []); + testErrorsAndWarnings('from a_index | eval least(textField)', []); + testErrorsAndWarnings('from a_index | eval var = least(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval least(textField, textField)', []); testErrorsAndWarnings('from a_index | eval var = least(versionField, versionField)', []); testErrorsAndWarnings('from a_index | eval least(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | eval var = least(to_version(stringField), to_version(stringField))', + 'from a_index | eval var = least(to_version(keywordField), to_version(keywordField))', [] ); @@ -3179,52 +3416,15 @@ describe('validation logic', () => { 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)', []); testErrorsAndWarnings('row var = left(to_string(true), to_integer(true))', []); testErrorsAndWarnings('row var = left(true, true)', [ - 'Argument of [left] must be [string], found value [true] type [boolean]', - 'Argument of [left] must be [number], found value [true] type [boolean]', + 'Argument of [left] must be [keyword], found value [true] type [boolean]', + 'Argument of [left] must be [integer], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where length(left(booleanField, booleanField)) > 0', [ - 'Argument of [left] must be [string], found value [booleanField] type [boolean]', - 'Argument of [left] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = left(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval left(keywordField, integerField)', []); testErrorsAndWarnings( 'from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))', @@ -3232,9 +3432,18 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval left(booleanField, booleanField)', [ - 'Argument of [left] must be [string], found value [booleanField] type [boolean]', - 'Argument of [left] must be [number], found value [booleanField] type [boolean]', + 'Argument of [left] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [left] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = left(textField, integerField)', []); + testErrorsAndWarnings('from a_index | eval left(textField, integerField)', []); + + testErrorsAndWarnings('from a_index | eval left(keywordField, integerField, extraArg)', [ + 'Error: [left] function expects exactly 2 arguments, got 3.', ]); + + testErrorsAndWarnings('from a_index | sort left(keywordField, integerField)', []); testErrorsAndWarnings('from a_index | eval left(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval left(nullVar, nullVar)', []); }); @@ -3242,7355 +3451,11003 @@ describe('validation logic', () => { 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('row var = length(to_string(true))', []); - testErrorsAndWarnings('from a_index | where length(numberField) > 0', [ - 'Argument of [length] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('row var = length(true)', [ + 'Argument of [length] must be [keyword], found value [true] type [boolean]', ]); - 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 var = length(keywordField)', []); + testErrorsAndWarnings('from a_index | eval length(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = length(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval length(stringField, extraArg)', [ - 'Error: [length] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval length(booleanField)', [ + 'Argument of [length] must be [keyword], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = length(*)', [ 'Using wildcards (*) in length is not allowed', ]); - testErrorsAndWarnings('from a_index | sort length(stringField)', []); - testErrorsAndWarnings('row var = length(to_string(true))', []); - - testErrorsAndWarnings('row var = length(true)', [ - 'Argument of [length] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = length(textField)', []); + testErrorsAndWarnings('from a_index | eval length(textField)', []); - testErrorsAndWarnings('from a_index | where length(booleanField) > 0', [ - 'Argument of [length] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval length(keywordField, extraArg)', [ + 'Error: [length] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | eval var = length(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval length(booleanField)', [ - 'Argument of [length] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | sort length(keywordField)', []); testErrorsAndWarnings('from a_index | eval length(null)', []); testErrorsAndWarnings('row nullVar = null | eval length(nullVar)', []); }); - describe('log', () => { - testErrorsAndWarnings('row var = log(5, 5)', []); - testErrorsAndWarnings('row log(5, 5)', []); - testErrorsAndWarnings('row var = log(to_integer("a"), to_integer("a"))', []); + describe('locate', () => { + testErrorsAndWarnings('row var = locate("a", "a")', []); + testErrorsAndWarnings('row locate("a", "a")', []); + testErrorsAndWarnings('row var = locate(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = locate("a", "a", 5)', []); + testErrorsAndWarnings('row locate("a", "a", 5)', []); + testErrorsAndWarnings( + 'row var = locate(to_string(true), to_string(true), to_integer(true))', + [] + ); - testErrorsAndWarnings('row var = 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('row var = locate(true, true, true)', [ + 'Argument of [locate] must be [keyword], found value [true] type [boolean]', + 'Argument of [locate] must be [keyword], found value [true] type [boolean]', + 'Argument of [locate] must be [integer], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where log(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = locate(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval locate(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))', + [] + ); - 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 locate(booleanField, booleanField)', [ + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = log(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval log(numberField, numberField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = locate(keywordField, keywordField, integerField)', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = log(to_integer(stringField), to_integer(stringField))', + 'from a_index | eval locate(keywordField, keywordField, integerField)', [] ); - 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 var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | eval log(numberField, numberField, extraArg)', [ - 'Error: [log] function expects no more than 2 arguments, got 3.', - ]); + testErrorsAndWarnings( + 'from a_index | eval locate(booleanField, booleanField, booleanField)', + [ + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = locate(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval locate(keywordField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(keywordField, textField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval locate(keywordField, textField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = locate(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval locate(textField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(textField, keywordField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval locate(textField, keywordField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = locate(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval locate(textField, textField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = locate(textField, textField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval locate(textField, textField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval locate(keywordField, keywordField, integerField, extraArg)', + ['Error: [locate] function expects no more than 3 arguments, got 4.'] + ); - testErrorsAndWarnings('from a_index | sort log(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | sort locate(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval locate(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval locate(nullVar, nullVar, nullVar)', []); + }); + + describe('log', () => { + testErrorsAndWarnings('row var = log(5.5)', []); + testErrorsAndWarnings('row log(5.5)', []); + testErrorsAndWarnings('row var = log(to_double(true))', []); + testErrorsAndWarnings('row var = log(5.5, 5.5)', []); + testErrorsAndWarnings('row log(5.5, 5.5)', []); + testErrorsAndWarnings('row var = log(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = log(5.5, 5)', []); + testErrorsAndWarnings('row log(5.5, 5)', []); + testErrorsAndWarnings('row var = log(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = log(to_double(true), 5)', []); testErrorsAndWarnings('row var = log(5)', []); testErrorsAndWarnings('row log(5)', []); testErrorsAndWarnings('row var = log(to_integer(true))', []); + testErrorsAndWarnings('row var = log(5, 5.5)', []); + testErrorsAndWarnings('row log(5, 5.5)', []); + testErrorsAndWarnings('row var = log(to_integer(true), to_double(true))', []); + testErrorsAndWarnings('row var = log(5, 5)', []); + testErrorsAndWarnings('row log(5, 5)', []); testErrorsAndWarnings('row var = log(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = log(to_integer(true), 5)', []); + testErrorsAndWarnings('row var = log(5, to_double(true))', []); + testErrorsAndWarnings('row var = log(5, to_integer(true))', []); testErrorsAndWarnings('row var = log(true, true)', [ - 'Argument of [log] must be [number], found value [true] type [boolean]', - 'Argument of [log] must be [number], found value [true] type [boolean]', + 'Argument of [log] must be [double], found value [true] type [boolean]', + 'Argument of [log] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where log(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where log(doubleField) > 0', []); testErrorsAndWarnings('from a_index | where log(booleanField) > 0', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where log(booleanField, booleanField) > 0', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | where log(doubleField, doubleField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = log(numberField)', []); - testErrorsAndWarnings('from a_index | eval log(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = log(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where log(booleanField, booleanField) > 0', [ + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where log(doubleField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(doubleField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(doubleField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where log(unsignedLongField, unsignedLongField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = log(to_double(booleanField))', []); testErrorsAndWarnings('from a_index | eval log(booleanField)', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = log(*)', [ 'Using wildcards (*) in log is not allowed', ]); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, doubleField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = log(to_double(booleanField), to_double(booleanField))', [] ); testErrorsAndWarnings('from a_index | eval log(booleanField, booleanField)', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort log(numberField)', []); - testErrorsAndWarnings('from a_index | eval log(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval log(nullVar, nullVar)', []); - }); - - describe('log10', () => { - testErrorsAndWarnings('row var = log10(5)', []); - testErrorsAndWarnings('row log10(5)', []); - testErrorsAndWarnings('row var = log10(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, integerField)', []); - testErrorsAndWarnings('row var = log10("a")', [ - 'Argument of [log10] must be [number], found value ["a"] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_double(booleanField), to_integer(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | where log10(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_double(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, unsignedLongField)', []); - 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 = log(to_double(booleanField), unsignedLongField)', + [] + ); - 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 var = log(integerField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = log(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = log(integerField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, doubleField)', []); - testErrorsAndWarnings('from a_index | eval log10(stringField)', [ - 'Argument of [log10] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), to_double(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | eval log10(numberField, extraArg)', [ - 'Error: [log10] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings('from a_index | eval var = log(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, integerField)', []); - testErrorsAndWarnings('from a_index | eval var = log10(*)', [ - 'Using wildcards (*) in log10 is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | sort log10(numberField)', []); - testErrorsAndWarnings('row var = log10(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval var = log(integerField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(integerField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, unsignedLongField)', []); - testErrorsAndWarnings('row var = log10(true)', [ - 'Argument of [log10] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), unsignedLongField)', + [] + ); - testErrorsAndWarnings('from a_index | where log10(booleanField) > 0', [ - 'Argument of [log10] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = log(longField)', []); + testErrorsAndWarnings('from a_index | eval log(longField)', []); + testErrorsAndWarnings('from a_index | eval var = log(longField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, doubleField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(longField, to_double(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = log(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, doubleField)', []); - testErrorsAndWarnings('from a_index | eval var = log10(to_integer(booleanField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(unsignedLongField, to_double(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | eval log10(booleanField)', [ - 'Argument of [log10] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = log(unsignedLongField, to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(unsignedLongField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval log(doubleField, doubleField, extraArg)', [ + 'Error: [log] function expects no more than 2 arguments, got 3.', ]); - testErrorsAndWarnings('from a_index | eval log10(null)', []); - testErrorsAndWarnings('row nullVar = null | eval log10(nullVar)', []); + + testErrorsAndWarnings('from a_index | sort log(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval log(nullVar, nullVar)', []); }); - describe('ltrim', () => { - testErrorsAndWarnings('row var = ltrim("a")', []); - testErrorsAndWarnings('row ltrim("a")', []); - testErrorsAndWarnings('row var = ltrim(to_string("a"))', []); + describe('log10', () => { + testErrorsAndWarnings('row var = log10(5.5)', []); + testErrorsAndWarnings('row log10(5.5)', []); + testErrorsAndWarnings('row var = log10(to_double(true))', []); + testErrorsAndWarnings('row var = log10(5)', []); + testErrorsAndWarnings('row log10(5)', []); + testErrorsAndWarnings('row var = log10(to_integer(true))', []); - testErrorsAndWarnings('row var = ltrim(5)', [ - 'Argument of [ltrim] must be [string], found value [5] type [number]', + testErrorsAndWarnings('row var = log10(true)', [ + 'Argument of [log10] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where length(ltrim(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | where log10(doubleField) > 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 | where log10(booleanField) > 0', [ + 'Argument of [log10] must be [double], found value [booleanField] type [boolean]', ]); - 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 | where log10(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log10(longField) > 0', []); + testErrorsAndWarnings('from a_index | where log10(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = log10(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log10(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = log10(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval ltrim(numberField)', [ - 'Argument of [ltrim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | eval log10(booleanField)', [ + 'Argument of [log10] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval ltrim(stringField, extraArg)', [ - 'Error: [ltrim] 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 | eval var = ltrim(*)', [ - 'Using wildcards (*) in ltrim is not allowed', + testErrorsAndWarnings('from a_index | eval var = log10(integerField)', []); + testErrorsAndWarnings('from a_index | eval log10(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = log10(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = log10(longField)', []); + testErrorsAndWarnings('from a_index | eval log10(longField)', []); + testErrorsAndWarnings('from a_index | eval var = log10(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log10(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval log10(doubleField, extraArg)', [ + 'Error: [log10] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort ltrim(stringField)', []); + testErrorsAndWarnings('from a_index | sort log10(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log10(null)', []); + testErrorsAndWarnings('row nullVar = null | eval log10(nullVar)', []); + }); + + describe('ltrim', () => { + testErrorsAndWarnings('row var = ltrim("a")', []); + testErrorsAndWarnings('row ltrim("a")', []); testErrorsAndWarnings('row var = ltrim(to_string(true))', []); testErrorsAndWarnings('row var = ltrim(true)', [ - 'Argument of [ltrim] must be [string], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where length(ltrim(booleanField)) > 0', [ - 'Argument of [ltrim] must be [string], found value [booleanField] type [boolean]', + 'Argument of [ltrim] must be [keyword], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = ltrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval ltrim(keywordField)', []); testErrorsAndWarnings('from a_index | eval var = ltrim(to_string(booleanField))', []); testErrorsAndWarnings('from a_index | eval ltrim(booleanField)', [ - 'Argument of [ltrim] must be [string], found value [booleanField] type [boolean]', + 'Argument of [ltrim] must be [keyword], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval ltrim(null)', []); - testErrorsAndWarnings('row nullVar = null | eval ltrim(nullVar)', []); - }); - 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 | eval var = ltrim(*)', [ + 'Using wildcards (*) in ltrim is not allowed', ]); - testErrorsAndWarnings('from a_index | where mv_avg(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = ltrim(textField)', []); + testErrorsAndWarnings('from a_index | eval ltrim(textField)', []); - 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 ltrim(keywordField, extraArg)', [ + 'Error: [ltrim] function expects exactly one argument, got 2.', ]); - 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 | sort ltrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval ltrim(null)', []); + testErrorsAndWarnings('row nullVar = null | eval ltrim(nullVar)', []); + }); - testErrorsAndWarnings('from a_index | eval mv_avg(stringField)', [ - 'Argument of [mv_avg] must be [number], found value [stringField] type [string]', + describe('mv_append', () => { + testErrorsAndWarnings('row var = mv_append(true, true)', []); + testErrorsAndWarnings('row mv_append(true, true)', []); + testErrorsAndWarnings('row var = mv_append(to_boolean(true), to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_append(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', ]); - - testErrorsAndWarnings('from a_index | eval mv_avg(numberField, extraArg)', [ - 'Error: [mv_avg] function expects exactly one argument, got 2.', + testErrorsAndWarnings('row mv_append(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_avg(*)', [ - 'Using wildcards (*) in mv_avg is not allowed', - ]); + testErrorsAndWarnings( + 'row var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); - testErrorsAndWarnings('from a_index | sort mv_avg(numberField)', []); - testErrorsAndWarnings('row var = mv_avg(to_integer(true))', []); + testErrorsAndWarnings( + 'row var = mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); - testErrorsAndWarnings('row var = mv_avg(true)', [ - 'Argument of [mv_avg] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'row mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); - testErrorsAndWarnings('from a_index | where mv_avg(booleanField) > 0', [ - 'Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'row var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); - testErrorsAndWarnings('from a_index | eval var = mv_avg(to_integer(booleanField))', []); + testErrorsAndWarnings( + 'row var = mv_append(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', + [] + ); - testErrorsAndWarnings('from a_index | eval mv_avg(booleanField)', [ - 'Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval mv_avg(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_avg(nullVar)', []); - }); + testErrorsAndWarnings( + 'row mv_append(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', + [] + ); - 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_append(to_datetime(to_datetime("2021-01-01T00:00:00Z")), to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); - 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('row var = mv_append(5.5, 5.5)', []); + + testErrorsAndWarnings('row mv_append(5.5, 5.5)', []); + testErrorsAndWarnings('row var = mv_append(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = mv_append(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_append(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', ]); + testErrorsAndWarnings( + 'row var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); testErrorsAndWarnings( - 'from a_index | where length(mv_concat(stringField, stringField)) > 0', + 'row var = mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', [] ); 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]', - ] + 'row mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] ); - testErrorsAndWarnings('from a_index | eval var = mv_concat(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_concat(stringField, stringField)', []); + testErrorsAndWarnings( + 'row var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row var = mv_append(5, 5)', []); + testErrorsAndWarnings('row mv_append(5, 5)', []); + testErrorsAndWarnings('row var = mv_append(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))', + 'row var = mv_append(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', [] ); - 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('row var = mv_append("a", "a")', []); + testErrorsAndWarnings('row mv_append("a", "a")', []); + testErrorsAndWarnings('row var = mv_append(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_append(to_version("a"), to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_append(doubleField, doubleField) > 0', []); - testErrorsAndWarnings('from a_index | eval mv_concat(stringField, stringField, extraArg)', [ - 'Error: [mv_concat] function expects exactly 2 arguments, got 3.', - ]); + testErrorsAndWarnings( + 'from a_index | where mv_append(counterDoubleField, counterDoubleField) > 0', + [ + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', + ] + ); - testErrorsAndWarnings('from a_index | sort mv_concat(stringField, stringField)', []); - testErrorsAndWarnings('row var = mv_concat(to_string(true), to_string(true))', []); + testErrorsAndWarnings('from a_index | where mv_append(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_append(longField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(booleanField, booleanField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_append(booleanField, booleanField)', []); - testErrorsAndWarnings('row var = mv_concat(true, true)', [ - 'Argument of [mv_concat] must be [string], found value [true] type [boolean]', - 'Argument of [mv_concat] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))', + [] + ); testErrorsAndWarnings( - 'from a_index | where length(mv_concat(booleanField, booleanField)) > 0', + 'from a_index | eval mv_append(counterDoubleField, counterDoubleField)', [ - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', ] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))', + 'from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)', [] ); - testErrorsAndWarnings('from a_index | eval mv_concat(booleanField, booleanField)', [ - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval mv_concat(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_concat(nullVar, nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | eval mv_append(cartesianPointField, cartesianPointField)', + [] + ); - 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_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); - testErrorsAndWarnings('from a_index | eval var = mv_count(*)', [ - 'Using wildcards (*) in mv_count is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)', + [] + ); - testErrorsAndWarnings('from a_index | sort mv_count(stringField)', []); - testErrorsAndWarnings('row var = mv_count(true)', []); - testErrorsAndWarnings('row mv_count(true)', []); - testErrorsAndWarnings('row var = mv_count(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_count(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)', + [] + ); testErrorsAndWarnings( - 'row var = mv_count(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', [] ); - testErrorsAndWarnings('row var = mv_count(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_append(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(dateField, dateField)', []); testErrorsAndWarnings( - 'row var = mv_count(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))', [] ); - testErrorsAndWarnings('row var = mv_count(now())', []); - testErrorsAndWarnings('row mv_count(now())', []); - testErrorsAndWarnings('row var = mv_count(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_count(5)', []); - testErrorsAndWarnings('row mv_count(5)', []); - testErrorsAndWarnings('row var = mv_count(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_count(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_count(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_count(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_count(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_count(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_count(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_count(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_count(to_string(true))', []); - testErrorsAndWarnings('row var = mv_count(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_count(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_count(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_count(booleanField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(cartesianPointField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(cartesianShapeField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(geoPointField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(geoShapeField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(ipField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(stringField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(versionField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_append(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(doubleField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))', + 'from a_index | eval var = mv_append(to_double(booleanField), to_double(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(cartesianShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_append(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_count(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_geoshape(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_version(stringField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_append(geoShapeField, geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(booleanField, extraArg)', [ - 'Error: [mv_count] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | sort mv_count(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_count(nullVar)', []); - }); - - describe('mv_dedupe', () => { - testErrorsAndWarnings('row var = mv_dedupe("a")', []); - testErrorsAndWarnings('row mv_dedupe("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(stringField)', []); - - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(*)', [ - 'Using wildcards (*) in mv_dedupe is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort mv_dedupe(stringField)', []); - testErrorsAndWarnings('row var = mv_dedupe(true)', []); - testErrorsAndWarnings('row mv_dedupe(true)', []); - testErrorsAndWarnings('row var = mv_dedupe(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_dedupe(now())', []); - testErrorsAndWarnings('row mv_dedupe(now())', []); - testErrorsAndWarnings('row var = mv_dedupe(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_dedupe(5)', []); - testErrorsAndWarnings('row mv_dedupe(5)', []); - testErrorsAndWarnings('row var = mv_dedupe(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_dedupe(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_string(true))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_dedupe(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_version("a"))', []); - - testErrorsAndWarnings('from a_index | where mv_dedupe(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where length(mv_dedupe(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_boolean(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_version(stringField))', []); - - testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField, extraArg)', [ - 'Error: [mv_dedupe] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | sort mv_dedupe(booleanField)', []); - testErrorsAndWarnings('row mv_dedupe(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); testErrorsAndWarnings( - 'row var = mv_dedupe(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(integerField, integerField)', [] ); - - testErrorsAndWarnings('row var = mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval mv_append(integerField, integerField)', []); testErrorsAndWarnings( - 'row var = mv_dedupe(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))', [] ); - testErrorsAndWarnings('row var = mv_dedupe(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_dedupe(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_dedupe(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianPointField)', []); - + testErrorsAndWarnings('from a_index | eval var = mv_append(ipField, ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(ipField, ipField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))', + 'from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(keywordField, keywordField)', [] ); + testErrorsAndWarnings('from a_index | eval mv_append(keywordField, keywordField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_append(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_append(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(textField, textField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = mv_append(versionField, versionField)', [] ); + testErrorsAndWarnings('from a_index | eval mv_append(versionField, versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))', + 'from a_index | eval var = mv_append(to_version(keywordField), to_version(keywordField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))', + 'from a_index | eval mv_append(booleanField, booleanField, extraArg)', + ['Error: [mv_append] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort mv_append(booleanField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_append(nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_append("2022", "2022")', []); + + testErrorsAndWarnings( + 'from a_index | eval mv_append(concat("20", "22"), concat("20", "22"))', [] ); + }); - testErrorsAndWarnings('from a_index | eval mv_dedupe(numberField, extraArg)', [ - 'Error: [mv_dedupe] function expects exactly one argument, got 2.', + describe('mv_avg', () => { + testErrorsAndWarnings('row var = mv_avg(5.5)', []); + testErrorsAndWarnings('row mv_avg(5.5)', []); + testErrorsAndWarnings('row var = mv_avg(to_double(true))', []); + testErrorsAndWarnings('row var = mv_avg(5)', []); + testErrorsAndWarnings('row mv_avg(5)', []); + testErrorsAndWarnings('row var = mv_avg(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_avg(true)', [ + 'Argument of [mv_avg] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort mv_dedupe(numberField)', []); - testErrorsAndWarnings('row var = mv_dedupe(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_dedupe(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | where mv_avg(doubleField) > 0', []); - 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 | where mv_avg(booleanField) > 0', [ + 'Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings('from a_index | eval var = mv_first(*)', [ - 'Using wildcards (*) in mv_first is not allowed', + testErrorsAndWarnings('from a_index | where mv_avg(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_avg(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_avg(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_avg(booleanField)', [ + 'Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort mv_first(stringField)', []); - testErrorsAndWarnings('row var = mv_first(true)', []); - testErrorsAndWarnings('row mv_first(true)', []); - testErrorsAndWarnings('row var = mv_first(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_first(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(*)', [ + 'Using wildcards (*) in mv_avg is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_avg(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval mv_avg(doubleField, extraArg)', [ + 'Error: [mv_avg] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_avg(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_avg(nullVar)', []); + }); + + describe('mv_concat', () => { + testErrorsAndWarnings('row var = mv_concat("a", "a")', []); + testErrorsAndWarnings('row mv_concat("a", "a")', []); + testErrorsAndWarnings('row var = mv_concat(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = mv_concat(true, true)', [ + 'Argument of [mv_concat] must be [keyword], found value [true] type [boolean]', + 'Argument of [mv_concat] must be [keyword], found value [true] type [boolean]', + ]); testErrorsAndWarnings( - 'row var = mv_first(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_concat(keywordField, keywordField)', [] ); - - testErrorsAndWarnings('row var = mv_first(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval mv_concat(keywordField, keywordField)', []); testErrorsAndWarnings( - 'row var = mv_first(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))', [] ); - testErrorsAndWarnings('row var = mv_first(now())', []); - testErrorsAndWarnings('row mv_first(now())', []); - testErrorsAndWarnings('row var = mv_first(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_first(5)', []); - testErrorsAndWarnings('row mv_first(5)', []); - testErrorsAndWarnings('row var = mv_first(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_first(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_first(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_first(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_first(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_first(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_first(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_first(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_first(to_string(true))', []); - testErrorsAndWarnings('row var = mv_first(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_first(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_first(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_first(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where length(mv_first(stringField)) > 0', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(booleanField, booleanField)', [ + 'Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_concat(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(textField, textField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | eval mv_concat(keywordField, keywordField, extraArg)', + ['Error: [mv_concat] function expects exactly 2 arguments, got 3.'] ); - testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | sort mv_concat(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_concat(nullVar, nullVar)', []); + }); + + describe('mv_count', () => { + testErrorsAndWarnings('row var = mv_count(true)', []); + testErrorsAndWarnings('row mv_count(true)', []); + testErrorsAndWarnings('row var = mv_count(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_count(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_count(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_count(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_count(to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))', + 'row var = mv_count(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_first(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_geoshape(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_version(stringField))', []); + testErrorsAndWarnings('row var = mv_count(5.5)', []); - testErrorsAndWarnings('from a_index | eval mv_first(booleanField, extraArg)', [ - 'Error: [mv_first] function expects exactly one argument, got 2.', + testErrorsAndWarnings('row mv_count(5.5)', []); + testErrorsAndWarnings('row var = mv_count(to_double(true))', []); + testErrorsAndWarnings('row var = mv_count(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_count(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_count(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', ]); + testErrorsAndWarnings('row var = mv_count(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_count(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(5)', []); + testErrorsAndWarnings('row mv_count(5)', []); + testErrorsAndWarnings('row var = mv_count(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_count(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_count(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_count(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_count("a")', []); + testErrorsAndWarnings('row mv_count("a")', []); + testErrorsAndWarnings('row var = mv_count(to_string(true))', []); + testErrorsAndWarnings('row var = mv_count(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_count(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_count(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_count(booleanField) > 0', []); - testErrorsAndWarnings('from a_index | sort mv_first(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_first(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | where mv_count(counterDoubleField) > 0', [ + 'Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); - 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 | where mv_count(cartesianPointField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(cartesianShapeField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(geoPointField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(geoShapeField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(ipField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(textField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(versionField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(*)', [ - 'Using wildcards (*) in mv_last is not allowed', + testErrorsAndWarnings('from a_index | eval mv_count(counterDoubleField)', [ + 'Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]', ]); - testErrorsAndWarnings('from a_index | sort mv_last(stringField)', []); - testErrorsAndWarnings('row var = mv_last(true)', []); - testErrorsAndWarnings('row mv_last(true)', []); - testErrorsAndWarnings('row var = mv_last(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_last(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(*)', [ + 'Using wildcards (*) in mv_count is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(cartesianPointField)', []); testErrorsAndWarnings( - 'row var = mv_last(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))', [] ); - testErrorsAndWarnings('row var = mv_last(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(cartesianShapeField)', []); testErrorsAndWarnings( - 'row var = mv_last(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))', [] ); - testErrorsAndWarnings('row var = mv_last(now())', []); - testErrorsAndWarnings('row mv_last(now())', []); - testErrorsAndWarnings('row var = mv_last(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_last(5)', []); - testErrorsAndWarnings('row mv_last(5)', []); - testErrorsAndWarnings('row var = mv_last(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_last(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_last(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_last(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_last(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_last(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_last(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_last(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_last(to_string(true))', []); - testErrorsAndWarnings('row var = mv_last(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_last(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_last(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_last(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where length(mv_last(stringField)) > 0', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_count(booleanField, extraArg)', [ + 'Error: [mv_count] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_count(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_count("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_count(concat("20", "22"))', []); + }); + + describe('mv_dedupe', () => { + testErrorsAndWarnings('row var = mv_dedupe(true)', []); + testErrorsAndWarnings('row mv_dedupe(true)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_dedupe(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_dedupe(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = mv_dedupe(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = mv_dedupe(5.5)', []); + + testErrorsAndWarnings('row mv_dedupe(5.5)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_double(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_dedupe(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_dedupe(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_dedupe(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(5)', []); + testErrorsAndWarnings('row mv_dedupe(5)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_dedupe(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_dedupe("a")', []); + testErrorsAndWarnings('row mv_dedupe("a")', []); + testErrorsAndWarnings('row var = mv_dedupe(to_string(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_dedupe(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_dedupe(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_dedupe(counterDoubleField) > 0', [ + 'Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | where mv_dedupe(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_dedupe(longField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_dedupe(counterDoubleField)', [ + 'Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(*)', [ + 'Using wildcards (*) in mv_dedupe is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField, extraArg)', [ + 'Error: [mv_dedupe] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_dedupe(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(concat("20", "22"))', []); + }); + + describe('mv_first', () => { + testErrorsAndWarnings('row var = mv_first(true)', []); + testErrorsAndWarnings('row mv_first(true)', []); + testErrorsAndWarnings('row var = mv_first(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_first(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_first(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_first(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_first(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = mv_first(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = mv_first(5.5)', []); + + testErrorsAndWarnings('row mv_first(5.5)', []); + testErrorsAndWarnings('row var = mv_first(to_double(true))', []); + testErrorsAndWarnings('row var = mv_first(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_first(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_first(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_first(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(5)', []); + testErrorsAndWarnings('row mv_first(5)', []); + testErrorsAndWarnings('row var = mv_first(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_first(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_first(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_first(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_first("a")', []); + testErrorsAndWarnings('row mv_first("a")', []); + testErrorsAndWarnings('row var = mv_first(to_string(true))', []); + testErrorsAndWarnings('row var = mv_first(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_first(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_first(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_first(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_first(counterDoubleField) > 0', [ + 'Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | where mv_first(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_first(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_first(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_first(counterDoubleField)', [ + 'Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_first(*)', [ + 'Using wildcards (*) in mv_first is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_first(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_first(booleanField, extraArg)', [ + 'Error: [mv_first] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_first(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_first("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_first(concat("20", "22"))', []); + }); + + describe('mv_last', () => { + testErrorsAndWarnings('row var = mv_last(true)', []); + testErrorsAndWarnings('row mv_last(true)', []); + testErrorsAndWarnings('row var = mv_last(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_last(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_last(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_last(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_last(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = mv_last(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = mv_last(5.5)', []); + + testErrorsAndWarnings('row mv_last(5.5)', []); + testErrorsAndWarnings('row var = mv_last(to_double(true))', []); + testErrorsAndWarnings('row var = mv_last(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_last(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_last(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_last(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(5)', []); + testErrorsAndWarnings('row mv_last(5)', []); + testErrorsAndWarnings('row var = mv_last(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_last(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_last(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_last(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_last("a")', []); + testErrorsAndWarnings('row mv_last("a")', []); + testErrorsAndWarnings('row var = mv_last(to_string(true))', []); + testErrorsAndWarnings('row var = mv_last(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_last(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_last(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_last(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_last(counterDoubleField) > 0', [ + 'Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | where mv_last(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_last(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_last(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(booleanField)', []); testErrorsAndWarnings('from a_index | eval mv_last(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = mv_last(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_last(counterDoubleField)', [ + 'Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_last(*)', [ + 'Using wildcards (*) in mv_last is not allowed', + ]); + testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianPointField)', []); testErrorsAndWarnings('from a_index | eval mv_last(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))', + 'from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_last(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_last(booleanField, extraArg)', [ + 'Error: [mv_last] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_last(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_last(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_last("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_last(concat("20", "22"))', []); + }); + + describe('mv_max', () => { + testErrorsAndWarnings('row var = mv_max(true)', []); + testErrorsAndWarnings('row mv_max(true)', []); + testErrorsAndWarnings('row var = mv_max(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_max(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_max(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings( + 'row var = mv_max(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + testErrorsAndWarnings('row var = mv_max(5.5)', []); + testErrorsAndWarnings('row mv_max(5.5)', []); + testErrorsAndWarnings('row var = mv_max(to_double(true))', []); + testErrorsAndWarnings('row var = mv_max(5)', []); + testErrorsAndWarnings('row mv_max(5)', []); + testErrorsAndWarnings('row var = mv_max(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_max(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_max(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_max(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_max("a")', []); + testErrorsAndWarnings('row mv_max("a")', []); + testErrorsAndWarnings('row var = mv_max(to_string(true))', []); + testErrorsAndWarnings('row var = mv_max(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_max(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_max(to_version("a"))', []); + + testErrorsAndWarnings('row var = mv_max(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [mv_max] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_max(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_max(cartesianPointField) > 0', [ + 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_max(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_max(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_max(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_max(cartesianPointField)', [ + 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_max(*)', [ + 'Using wildcards (*) in mv_max is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_max(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_max(booleanField, extraArg)', [ + 'Error: [mv_max] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_max(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_max("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_max(concat("20", "22"))', []); + }); + + describe('mv_median', () => { + testErrorsAndWarnings('row var = mv_median(5.5)', []); + testErrorsAndWarnings('row mv_median(5.5)', []); + testErrorsAndWarnings('row var = mv_median(to_double(true))', []); + testErrorsAndWarnings('row var = mv_median(5)', []); + testErrorsAndWarnings('row mv_median(5)', []); + testErrorsAndWarnings('row var = mv_median(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_median(true)', [ + 'Argument of [mv_median] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_median(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_median(booleanField) > 0', [ + 'Argument of [mv_median] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_median(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_median(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_median(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_median(booleanField)', [ + 'Argument of [mv_median] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_median(*)', [ + 'Using wildcards (*) in mv_median is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_median(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval mv_median(doubleField, extraArg)', [ + 'Error: [mv_median] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_median(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_median(nullVar)', []); + }); + + describe('mv_min', () => { + testErrorsAndWarnings('row var = mv_min(true)', []); + testErrorsAndWarnings('row mv_min(true)', []); + testErrorsAndWarnings('row var = mv_min(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_min(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_min(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings( + 'row var = mv_min(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + testErrorsAndWarnings('row var = mv_min(5.5)', []); + testErrorsAndWarnings('row mv_min(5.5)', []); + testErrorsAndWarnings('row var = mv_min(to_double(true))', []); + testErrorsAndWarnings('row var = mv_min(5)', []); + testErrorsAndWarnings('row mv_min(5)', []); + testErrorsAndWarnings('row var = mv_min(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_min(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_min(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_min(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_min("a")', []); + testErrorsAndWarnings('row mv_min("a")', []); + testErrorsAndWarnings('row var = mv_min(to_string(true))', []); + testErrorsAndWarnings('row var = mv_min(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_min(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_min(to_version("a"))', []); + + testErrorsAndWarnings('row var = mv_min(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [mv_min] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_min(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_min(cartesianPointField) > 0', [ + 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_min(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_min(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_min(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_min(cartesianPointField)', [ + 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_min(*)', [ + 'Using wildcards (*) in mv_min is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_min(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_min(booleanField, extraArg)', [ + 'Error: [mv_min] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_min(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_min("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_min(concat("20", "22"))', []); + }); + + describe('mv_slice', () => { + testErrorsAndWarnings('row var = mv_slice(true, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(true, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(cartesianPointField, 5, 5)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_slice(cartesianPointField, 5, 5)', [ + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(true), to_integer(true))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(true), to_integer(true))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(to_datetime("2021-01-01T00:00:00Z"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_datetime("2021-01-01T00:00:00Z"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_datetime(to_datetime("2021-01-01T00:00:00Z")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(5.5, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(5.5, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_double(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(geoPointField, 5, 5)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_slice(geoPointField, 5, 5)', [ + 'Unknown column [geoPointField]', + ]); + + testErrorsAndWarnings( + 'row var = mv_slice(to_geopoint(geoPointField), to_integer(true), to_integer(true))', + ['Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_geoshape(geoPointField), to_integer(true), to_integer(true))', + ['Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(5, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(5, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_ip("127.0.0.1"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_ip("127.0.0.1"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice("a", 5, 5)', []); + testErrorsAndWarnings('row mv_slice("a", 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_string(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(5, to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_version("1.0.0"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_version("a"), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(5.5, true, true)', [ + 'Argument of [mv_slice] must be [integer], found value [true] type [boolean]', + 'Argument of [mv_slice] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(doubleField, integerField, integerField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(counterDoubleField, booleanField, booleanField) > 0', + [ + 'Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(integerField, integerField, integerField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(longField, integerField, integerField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(booleanField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(booleanField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(counterDoubleField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(cartesianPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(cartesianShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(dateField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(dateField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(doubleField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(doubleField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_double(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(geoPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(geoShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(integerField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(integerField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(longField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(longField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(longField, to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(versionField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(versionField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_version(keywordField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(booleanField, integerField, integerField, extraArg)', + ['Error: [mv_slice] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort mv_slice(booleanField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_slice(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)', []); + testErrorsAndWarnings( + 'from a_index | eval mv_slice("2022", integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(concat("20", "22"), integerField, integerField)', + [] + ); + }); + + describe('mv_sort', () => { + testErrorsAndWarnings('row var = mv_sort(true, "asc")', []); + testErrorsAndWarnings('row mv_sort(true, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_datetime("2021-01-01T00:00:00Z"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_datetime("2021-01-01T00:00:00Z"), "asc")', []); + testErrorsAndWarnings('row var = mv_sort(5.5, "asc")', []); + testErrorsAndWarnings('row mv_sort(5.5, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(5, "asc")', []); + testErrorsAndWarnings('row mv_sort(5, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_ip("127.0.0.1"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_ip("127.0.0.1"), "asc")', []); + testErrorsAndWarnings('row var = mv_sort("a", "asc")', []); + testErrorsAndWarnings('row mv_sort("a", "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_version("1.0.0"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_version("1.0.0"), "asc")', []); + + testErrorsAndWarnings('row var = mv_sort(to_cartesianpoint("POINT (30 10)"), true)', [ + 'Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + 'Argument of [mv_sort] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(dateField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(dateField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(doubleField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(doubleField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(integerField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(integerField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(ipField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(ipField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(keywordField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(keywordField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(longField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(longField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(textField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(textField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(versionField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(versionField, "asc")', []); + + testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc", extraArg)', [ + 'Error: [mv_sort] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_sort(nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_sort("2022", "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(concat("20", "22"), "asc")', []); + }); + + describe('mv_sum', () => { + testErrorsAndWarnings('row var = mv_sum(5.5)', []); + testErrorsAndWarnings('row mv_sum(5.5)', []); + testErrorsAndWarnings('row var = mv_sum(to_double(true))', []); + testErrorsAndWarnings('row var = mv_sum(5)', []); + testErrorsAndWarnings('row mv_sum(5)', []); + testErrorsAndWarnings('row var = mv_sum(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_sum(true)', [ + 'Argument of [mv_sum] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_sum(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_sum(booleanField) > 0', [ + 'Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_sum(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_sum(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_sum(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_sum(booleanField)', [ + 'Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sum(*)', [ + 'Using wildcards (*) in mv_sum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sum(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval mv_sum(doubleField, extraArg)', [ + 'Error: [mv_sum] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_sum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_sum(nullVar)', []); + }); + + describe('mv_zip', () => { + testErrorsAndWarnings('row var = mv_zip("a", "a")', []); + testErrorsAndWarnings('row mv_zip("a", "a")', []); + testErrorsAndWarnings('row var = mv_zip(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = mv_zip("a", "a", "a")', []); + testErrorsAndWarnings('row mv_zip("a", "a", "a")', []); + testErrorsAndWarnings( + 'row var = mv_zip(to_string(true), to_string(true), to_string(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_zip(true, true, true)', [ + 'Argument of [mv_zip] must be [keyword], found value [true] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [true] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_zip(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_zip(booleanField, booleanField)', [ + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(booleanField, booleanField, booleanField)', + [ + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, keywordField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_zip(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(keywordField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, textField, keywordField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, textField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(keywordField, textField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_zip(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(textField, keywordField, keywordField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, keywordField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_zip(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, textField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, textField, keywordField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, textField, keywordField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, textField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, keywordField, keywordField, extraArg)', + ['Error: [mv_zip] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings('from a_index | sort mv_zip(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)', []); + }); + + 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()', []); + testErrorsAndWarnings('row nullVar = null | eval 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()', []); + testErrorsAndWarnings('row nullVar = null | eval pi()', []); + }); + + describe('pow', () => { + testErrorsAndWarnings('row var = pow(5.5, 5.5)', []); + testErrorsAndWarnings('row pow(5.5, 5.5)', []); + testErrorsAndWarnings('row var = pow(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = pow(5.5, 5)', []); + testErrorsAndWarnings('row pow(5.5, 5)', []); + testErrorsAndWarnings('row var = pow(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = pow(to_double(true), 5)', []); + testErrorsAndWarnings('row var = pow(5, 5.5)', []); + testErrorsAndWarnings('row pow(5, 5.5)', []); + testErrorsAndWarnings('row var = pow(to_integer(true), to_double(true))', []); + testErrorsAndWarnings('row var = pow(5, 5)', []); + testErrorsAndWarnings('row pow(5, 5)', []); + testErrorsAndWarnings('row var = pow(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = pow(to_integer(true), 5)', []); + testErrorsAndWarnings('row var = pow(5, to_double(true))', []); + testErrorsAndWarnings('row var = pow(5, to_integer(true))', []); + + testErrorsAndWarnings('row var = pow(true, true)', [ + 'Argument of [pow] must be [double], found value [true] type [boolean]', + 'Argument of [pow] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where pow(doubleField, doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where pow(booleanField, booleanField) > 0', [ + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where pow(doubleField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(doubleField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(doubleField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(unsignedLongField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(unsignedLongField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(unsignedLongField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where pow(unsignedLongField, unsignedLongField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), to_double(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval pow(booleanField, booleanField)', [ + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, unsignedLongField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), unsignedLongField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(integerField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), to_double(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(integerField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(integerField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, unsignedLongField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), unsignedLongField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(longField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, doubleField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(longField, to_double(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = pow(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = pow(unsignedLongField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(unsignedLongField, to_double(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(unsignedLongField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(unsignedLongField, to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(unsignedLongField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(unsignedLongField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval pow(doubleField, doubleField, extraArg)', [ + 'Error: [pow] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort pow(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval pow(nullVar, nullVar)', []); + }); + + describe('repeat', () => { + testErrorsAndWarnings('row var = repeat("a", 5)', []); + testErrorsAndWarnings('row repeat("a", 5)', []); + testErrorsAndWarnings('row var = repeat(to_string(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = repeat(true, true)', [ + 'Argument of [repeat] must be [keyword], found value [true] type [boolean]', + 'Argument of [repeat] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = repeat(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval repeat(keywordField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval repeat(booleanField, booleanField)', [ + 'Argument of [repeat] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [repeat] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = repeat(textField, integerField)', []); + testErrorsAndWarnings('from a_index | eval repeat(textField, integerField)', []); + + testErrorsAndWarnings('from a_index | eval repeat(keywordField, integerField, extraArg)', [ + 'Error: [repeat] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort repeat(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval repeat(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval repeat(nullVar, nullVar)', []); + }); + + describe('replace', () => { + testErrorsAndWarnings('row var = replace("a", "a", "a")', []); + testErrorsAndWarnings('row replace("a", "a", "a")', []); + testErrorsAndWarnings( + 'row var = replace(to_string(true), to_string(true), to_string(true))', + [] + ); + + testErrorsAndWarnings('row var = replace(true, true, true)', [ + 'Argument of [replace] must be [keyword], found value [true] type [boolean]', + 'Argument of [replace] must be [keyword], found value [true] type [boolean]', + 'Argument of [replace] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(booleanField, booleanField, booleanField)', + [ + 'Argument of [replace] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [keyword], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, textField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, textField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(textField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(textField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(textField, textField, keywordField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, textField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval replace(textField, textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, keywordField, keywordField, extraArg)', + ['Error: [replace] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort replace(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval replace(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval replace(nullVar, nullVar, nullVar)', []); + }); + + describe('right', () => { + testErrorsAndWarnings('row var = right("a", 5)', []); + testErrorsAndWarnings('row right("a", 5)', []); + testErrorsAndWarnings('row var = right(to_string(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = right(true, true)', [ + 'Argument of [right] must be [keyword], found value [true] type [boolean]', + 'Argument of [right] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = right(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval right(keywordField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval right(booleanField, booleanField)', [ + 'Argument of [right] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [right] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = right(textField, integerField)', []); + testErrorsAndWarnings('from a_index | eval right(textField, integerField)', []); + + testErrorsAndWarnings('from a_index | eval right(keywordField, integerField, extraArg)', [ + 'Error: [right] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort right(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval right(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval right(nullVar, nullVar)', []); + }); + + describe('round', () => { + testErrorsAndWarnings('row var = round(5.5)', []); + testErrorsAndWarnings('row round(5.5)', []); + testErrorsAndWarnings('row var = round(to_double(true))', []); + testErrorsAndWarnings('row var = round(5.5, 5)', []); + testErrorsAndWarnings('row round(5.5, 5)', []); + testErrorsAndWarnings('row var = round(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = round(5)', []); + testErrorsAndWarnings('row round(5)', []); + testErrorsAndWarnings('row var = round(to_integer(true))', []); + testErrorsAndWarnings('row var = round(5, 5)', []); + testErrorsAndWarnings('row round(5, 5)', []); + testErrorsAndWarnings('row var = round(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = round(5, to_integer(true))', []); + + testErrorsAndWarnings('row var = round(true, true)', [ + 'Argument of [round] must be [double], found value [true] type [boolean]', + 'Argument of [round] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where round(booleanField) > 0', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(doubleField, integerField) > 0', []); + + testErrorsAndWarnings('from a_index | where round(booleanField, booleanField) > 0', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + 'Argument of [round] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where round(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where round(longField) > 0', []); + testErrorsAndWarnings('from a_index | where round(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where round(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = round(doubleField)', []); + testErrorsAndWarnings('from a_index | eval round(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = round(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval round(booleanField)', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(*)', [ + 'Using wildcards (*) in round is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval round(doubleField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = round(to_double(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval round(booleanField, booleanField)', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + 'Argument of [round] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(integerField)', []); + testErrorsAndWarnings('from a_index | eval round(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = round(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = round(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval round(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = round(longField)', []); + testErrorsAndWarnings('from a_index | eval round(longField)', []); + testErrorsAndWarnings('from a_index | eval var = round(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval round(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = round(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = round(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval round(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval round(doubleField, integerField, extraArg)', [ + 'Error: [round] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort round(doubleField)', []); + testErrorsAndWarnings('from a_index | eval round(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval round(nullVar, nullVar)', []); + }); + + describe('rtrim', () => { + testErrorsAndWarnings('row var = rtrim("a")', []); + testErrorsAndWarnings('row rtrim("a")', []); + testErrorsAndWarnings('row var = rtrim(to_string(true))', []); + + testErrorsAndWarnings('row var = rtrim(true)', [ + 'Argument of [rtrim] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval rtrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = rtrim(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval rtrim(booleanField)', [ + 'Argument of [rtrim] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(*)', [ + 'Using wildcards (*) in rtrim is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(textField)', []); + testErrorsAndWarnings('from a_index | eval rtrim(textField)', []); + + testErrorsAndWarnings('from a_index | eval rtrim(keywordField, extraArg)', [ + 'Error: [rtrim] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort rtrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval rtrim(null)', []); + testErrorsAndWarnings('row nullVar = null | eval rtrim(nullVar)', []); + }); + + describe('signum', () => { + testErrorsAndWarnings('row var = signum(5.5)', []); + testErrorsAndWarnings('row signum(5.5)', []); + testErrorsAndWarnings('row var = signum(to_double(true))', []); + testErrorsAndWarnings('row var = signum(5)', []); + testErrorsAndWarnings('row signum(5)', []); + testErrorsAndWarnings('row var = signum(to_integer(true))', []); + + testErrorsAndWarnings('row var = signum(true)', [ + 'Argument of [signum] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where signum(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where signum(booleanField) > 0', [ + 'Argument of [signum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where signum(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where signum(longField) > 0', []); + testErrorsAndWarnings('from a_index | where signum(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = signum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval signum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = signum(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval signum(booleanField)', [ + 'Argument of [signum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = signum(*)', [ + 'Using wildcards (*) in signum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = signum(integerField)', []); + testErrorsAndWarnings('from a_index | eval signum(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = signum(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = signum(longField)', []); + testErrorsAndWarnings('from a_index | eval signum(longField)', []); + testErrorsAndWarnings('from a_index | eval var = signum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval signum(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval signum(doubleField, extraArg)', [ + 'Error: [signum] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort signum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval signum(null)', []); + testErrorsAndWarnings('row nullVar = null | eval signum(nullVar)', []); + }); + + describe('sin', () => { + testErrorsAndWarnings('row var = sin(5.5)', []); + testErrorsAndWarnings('row sin(5.5)', []); + testErrorsAndWarnings('row var = sin(to_double(true))', []); + testErrorsAndWarnings('row var = sin(5)', []); + testErrorsAndWarnings('row sin(5)', []); + testErrorsAndWarnings('row var = sin(to_integer(true))', []); + + testErrorsAndWarnings('row var = sin(true)', [ + 'Argument of [sin] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sin(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where sin(booleanField) > 0', [ + 'Argument of [sin] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sin(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where sin(longField) > 0', []); + testErrorsAndWarnings('from a_index | where sin(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = sin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = sin(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sin(booleanField)', [ + 'Argument of [sin] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sin(*)', [ + 'Using wildcards (*) in sin is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = sin(integerField)', []); + testErrorsAndWarnings('from a_index | eval sin(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = sin(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = sin(longField)', []); + testErrorsAndWarnings('from a_index | eval sin(longField)', []); + testErrorsAndWarnings('from a_index | eval var = sin(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval sin(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval sin(doubleField, extraArg)', [ + 'Error: [sin] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort sin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sin(null)', []); + testErrorsAndWarnings('row nullVar = null | eval sin(nullVar)', []); + }); + + describe('sinh', () => { + testErrorsAndWarnings('row var = sinh(5.5)', []); + testErrorsAndWarnings('row sinh(5.5)', []); + testErrorsAndWarnings('row var = sinh(to_double(true))', []); + testErrorsAndWarnings('row var = sinh(5)', []); + testErrorsAndWarnings('row sinh(5)', []); + testErrorsAndWarnings('row var = sinh(to_integer(true))', []); + + testErrorsAndWarnings('row var = sinh(true)', [ + 'Argument of [sinh] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sinh(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where sinh(booleanField) > 0', [ + 'Argument of [sinh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sinh(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where sinh(longField) > 0', []); + testErrorsAndWarnings('from a_index | where sinh(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = sinh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sinh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = sinh(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sinh(booleanField)', [ + 'Argument of [sinh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sinh(*)', [ + 'Using wildcards (*) in sinh is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = sinh(integerField)', []); + testErrorsAndWarnings('from a_index | eval sinh(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = sinh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = sinh(longField)', []); + testErrorsAndWarnings('from a_index | eval sinh(longField)', []); + testErrorsAndWarnings('from a_index | eval var = sinh(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval sinh(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval sinh(doubleField, extraArg)', [ + 'Error: [sinh] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort sinh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sinh(null)', []); + testErrorsAndWarnings('row nullVar = null | eval sinh(nullVar)', []); + }); + + describe('split', () => { + testErrorsAndWarnings('row var = split("a", "a")', []); + testErrorsAndWarnings('row split("a", "a")', []); + testErrorsAndWarnings('row var = split(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = split(true, true)', [ + 'Argument of [split] must be [keyword], found value [true] type [boolean]', + 'Argument of [split] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = split(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval split(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = split(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval split(booleanField, booleanField)', [ + 'Argument of [split] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [split] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = split(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval split(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = split(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval split(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = split(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval split(textField, textField)', []); + + testErrorsAndWarnings('from a_index | eval split(keywordField, keywordField, extraArg)', [ + 'Error: [split] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort split(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval split(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval split(nullVar, nullVar)', []); + }); + + describe('sqrt', () => { + testErrorsAndWarnings('row var = sqrt(5.5)', []); + testErrorsAndWarnings('row sqrt(5.5)', []); + testErrorsAndWarnings('row var = sqrt(to_double(true))', []); + testErrorsAndWarnings('row var = sqrt(5)', []); + testErrorsAndWarnings('row sqrt(5)', []); + testErrorsAndWarnings('row var = sqrt(to_integer(true))', []); + + testErrorsAndWarnings('row var = sqrt(true)', [ + 'Argument of [sqrt] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sqrt(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where sqrt(booleanField) > 0', [ + 'Argument of [sqrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sqrt(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where sqrt(longField) > 0', []); + testErrorsAndWarnings('from a_index | where sqrt(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sqrt(booleanField)', [ + 'Argument of [sqrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sqrt(*)', [ + 'Using wildcards (*) in sqrt is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = sqrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(longField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(longField)', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval sqrt(doubleField, extraArg)', [ + 'Error: [sqrt] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort sqrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(null)', []); + testErrorsAndWarnings('row nullVar = null | eval sqrt(nullVar)', []); + }); + + describe('st_contains', () => { + testErrorsAndWarnings('row var = st_contains(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_contains(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_contains(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_contains(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + 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( + 'row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_contains(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_contains(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_contains(geoPointField, to_geoshape("POINT (30 10)"))', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_contains(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape("POINT (30 10)"), geoPointField)', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_contains(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + 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_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_contains(true, true)', [ + 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_contains(booleanField, booleanField)', [ + 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(geoPointField), to_geopoint(geoPointField))', + [] + ); + + 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(geoPointField), to_geoshape(geoPointField))', + [] + ); + + 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(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_contains(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_contains(nullVar, nullVar)', []); + }); + + describe('st_disjoint', () => { + testErrorsAndWarnings('row var = st_disjoint(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_disjoint(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_disjoint(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + 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( + 'row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_disjoint(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_disjoint(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_disjoint(geoPointField, to_geoshape("POINT (30 10)"))', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_disjoint(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape("POINT (30 10)"), geoPointField)', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_disjoint(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + 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_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_disjoint(true, true)', [ + 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_disjoint(booleanField, booleanField)', [ + 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(geoPointField), to_geopoint(geoPointField))', + [] + ); + + 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(geoPointField), to_geoshape(geoPointField))', + [] + ); + + 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(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_disjoint(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_disjoint(nullVar, nullVar)', []); + }); + + describe('st_distance', () => { + testErrorsAndWarnings('row var = st_distance(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_distance(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_distance(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_distance(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_distance(true, true)', [ + 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_distance(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_distance(booleanField, booleanField)', [ + 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_distance(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_distance] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_distance(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_distance(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_distance(nullVar, nullVar)', []); + }); + + describe('st_intersects', () => { + testErrorsAndWarnings('row var = st_intersects(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_intersects(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_intersects(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + 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( + 'row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_intersects(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_intersects(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_intersects(geoPointField, to_geoshape("POINT (30 10)"))', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_intersects(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape("POINT (30 10)"), geoPointField)', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_intersects(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + 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_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_intersects(true, true)', [ + 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_intersects(booleanField, booleanField)', [ + 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(geoPointField), to_geopoint(geoPointField))', + [] + ); + + 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(geoPointField), to_geoshape(geoPointField))', + [] + ); + + 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(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoShapeField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoShapeField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_intersects(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_intersects(nullVar, nullVar)', []); + }); + + describe('st_within', () => { + testErrorsAndWarnings('row var = st_within(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_within(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_within(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_within(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + 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( + 'row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_within(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_within(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row var = st_within(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_within(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row var = st_within(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_within(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + 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_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_within(true, true)', [ + 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_within(booleanField, booleanField)', [ + 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + 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(geoPointField), to_geopoint(geoPointField))', + [] + ); + + 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(geoPointField), to_geoshape(geoPointField))', + [] + ); + + 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(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_within(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_within(nullVar, nullVar)', []); + }); + + describe('st_x', () => { + testErrorsAndWarnings('row var = st_x(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_x(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_x(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_x(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row st_x(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = st_x(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + + testErrorsAndWarnings('row var = st_x(true)', [ + 'Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_x(booleanField)', [ + 'Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(*)', [ + 'Using wildcards (*) in st_x is not allowed', + ]); + + 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(geoPointField))', []); + + 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(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_x(null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_x(nullVar)', []); + }); + + describe('st_y', () => { + testErrorsAndWarnings('row var = st_y(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_y(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_y(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_y(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row st_y(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = st_y(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + + testErrorsAndWarnings('row var = st_y(true)', [ + 'Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_y(booleanField)', [ + 'Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(*)', [ + 'Using wildcards (*) in st_y is not allowed', + ]); + + 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(geoPointField))', []); + + 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(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_y(null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_y(nullVar)', []); + }); + + describe('starts_with', () => { + testErrorsAndWarnings('row var = starts_with("a", "a")', []); + testErrorsAndWarnings('row starts_with("a", "a")', []); + testErrorsAndWarnings('row var = starts_with(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = starts_with(true, true)', [ + 'Argument of [starts_with] must be [keyword], found value [true] type [boolean]', + 'Argument of [starts_with] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = starts_with(keywordField, keywordField)', + [] + ); + testErrorsAndWarnings('from a_index | eval starts_with(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval starts_with(booleanField, booleanField)', [ + 'Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = starts_with(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval starts_with(textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval starts_with(keywordField, keywordField, extraArg)', + ['Error: [starts_with] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort starts_with(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval starts_with(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval starts_with(nullVar, nullVar)', []); + }); + + describe('substring', () => { + testErrorsAndWarnings('row var = substring("a", 5, 5)', []); + testErrorsAndWarnings('row substring("a", 5, 5)', []); + + testErrorsAndWarnings( + 'row var = substring(to_string(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = substring(true, true, true)', [ + 'Argument of [substring] must be [keyword], found value [true] type [boolean]', + 'Argument of [substring] must be [integer], found value [true] type [boolean]', + 'Argument of [substring] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(booleanField, booleanField, booleanField)', + [ + 'Argument of [substring] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(keywordField, integerField, integerField, extraArg)', + ['Error: [substring] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort substring(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval substring(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval substring(nullVar, nullVar, nullVar)', []); + }); + + describe('tan', () => { + testErrorsAndWarnings('row var = tan(5.5)', []); + testErrorsAndWarnings('row tan(5.5)', []); + testErrorsAndWarnings('row var = tan(to_double(true))', []); + testErrorsAndWarnings('row var = tan(5)', []); + testErrorsAndWarnings('row tan(5)', []); + testErrorsAndWarnings('row var = tan(to_integer(true))', []); + + testErrorsAndWarnings('row var = tan(true)', [ + 'Argument of [tan] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tan(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where tan(booleanField) > 0', [ + 'Argument of [tan] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tan(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where tan(longField) > 0', []); + testErrorsAndWarnings('from a_index | where tan(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = tan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = tan(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval tan(booleanField)', [ + 'Argument of [tan] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tan(*)', [ + 'Using wildcards (*) in tan is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = tan(integerField)', []); + testErrorsAndWarnings('from a_index | eval tan(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = tan(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = tan(longField)', []); + testErrorsAndWarnings('from a_index | eval tan(longField)', []); + testErrorsAndWarnings('from a_index | eval var = tan(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval tan(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval tan(doubleField, extraArg)', [ + 'Error: [tan] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort tan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tan(null)', []); + testErrorsAndWarnings('row nullVar = null | eval tan(nullVar)', []); + }); + + describe('tanh', () => { + testErrorsAndWarnings('row var = tanh(5.5)', []); + testErrorsAndWarnings('row tanh(5.5)', []); + testErrorsAndWarnings('row var = tanh(to_double(true))', []); + testErrorsAndWarnings('row var = tanh(5)', []); + testErrorsAndWarnings('row tanh(5)', []); + testErrorsAndWarnings('row var = tanh(to_integer(true))', []); + + testErrorsAndWarnings('row var = tanh(true)', [ + 'Argument of [tanh] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tanh(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where tanh(booleanField) > 0', [ + 'Argument of [tanh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tanh(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where tanh(longField) > 0', []); + testErrorsAndWarnings('from a_index | where tanh(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = tanh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tanh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = tanh(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval tanh(booleanField)', [ + 'Argument of [tanh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tanh(*)', [ + 'Using wildcards (*) in tanh is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = tanh(integerField)', []); + testErrorsAndWarnings('from a_index | eval tanh(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = tanh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = tanh(longField)', []); + testErrorsAndWarnings('from a_index | eval tanh(longField)', []); + testErrorsAndWarnings('from a_index | eval var = tanh(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval tanh(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval tanh(doubleField, extraArg)', [ + 'Error: [tanh] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort tanh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tanh(null)', []); + testErrorsAndWarnings('row nullVar = null | eval tanh(nullVar)', []); + }); + + 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()', []); + testErrorsAndWarnings('row nullVar = null | eval tau()', []); + }); + + describe('to_base64', () => { + testErrorsAndWarnings('row var = to_base64("a")', []); + testErrorsAndWarnings('row to_base64("a")', []); + testErrorsAndWarnings('row var = to_base64(to_string(true))', []); + + testErrorsAndWarnings('row var = to_base64(true)', [ + 'Argument of [to_base64] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_base64(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_base64(booleanField)', [ + 'Argument of [to_base64] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(*)', [ + 'Using wildcards (*) in to_base64 is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(textField)', []); + testErrorsAndWarnings('from a_index | eval to_base64(textField)', []); + + testErrorsAndWarnings('from a_index | eval to_base64(keywordField, extraArg)', [ + 'Error: [to_base64] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_base64(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_base64(nullVar)', []); + }); + + describe('to_boolean', () => { + testErrorsAndWarnings('row var = to_boolean(true)', []); + testErrorsAndWarnings('row to_boolean(true)', []); + testErrorsAndWarnings('row var = to_bool(true)', []); + testErrorsAndWarnings('row var = to_boolean(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_boolean(5.5)', []); + testErrorsAndWarnings('row to_boolean(5.5)', []); + testErrorsAndWarnings('row var = to_bool(5.5)', []); + testErrorsAndWarnings('row var = to_boolean(to_double(true))', []); + testErrorsAndWarnings('row var = to_boolean(5)', []); + testErrorsAndWarnings('row to_boolean(5)', []); + testErrorsAndWarnings('row var = to_bool(5)', []); + testErrorsAndWarnings('row var = to_boolean(to_integer(true))', []); + testErrorsAndWarnings('row var = to_boolean("a")', []); + testErrorsAndWarnings('row to_boolean("a")', []); + testErrorsAndWarnings('row var = to_bool("a")', []); + testErrorsAndWarnings('row var = to_boolean(to_string(true))', []); + + testErrorsAndWarnings('row var = to_boolean(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_boolean(cartesianPointField)', [ + 'Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(*)', [ + 'Using wildcards (*) in to_boolean is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(longField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(textField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_boolean(booleanField, extraArg)', [ + 'Error: [to_boolean] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_boolean(nullVar)', []); + }); + + describe('to_cartesianpoint', () => { + testErrorsAndWarnings('row var = to_cartesianpoint(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row to_cartesianpoint(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings( + 'row var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]'] + ); + testErrorsAndWarnings('row var = to_cartesianpoint("a")', []); + testErrorsAndWarnings('row to_cartesianpoint("a")', []); + testErrorsAndWarnings('row var = to_cartesianpoint(to_string(true))', []); + + testErrorsAndWarnings('row var = to_cartesianpoint(true)', [ + 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(cartesianPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(booleanField)', [ + 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(*)', [ + 'Using wildcards (*) in to_cartesianpoint is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(keywordField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(to_string(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(textField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)', + ['Error: [to_cartesianpoint] function expects exactly one argument, got 2.'] + ); + + testErrorsAndWarnings('from a_index | sort to_cartesianpoint(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_cartesianpoint(nullVar)', []); + }); + + describe('to_cartesianshape', () => { + testErrorsAndWarnings('row var = to_cartesianshape(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row to_cartesianshape(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]'] + ); + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianshape("POINT (30 10)"))', + [] + ); + testErrorsAndWarnings('row to_cartesianshape(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]'] + ); + testErrorsAndWarnings('row var = to_cartesianshape("a")', []); + testErrorsAndWarnings('row to_cartesianshape("a")', []); + testErrorsAndWarnings('row var = to_cartesianshape(to_string(true))', []); + + testErrorsAndWarnings('row var = to_cartesianshape(true)', [ + 'Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(cartesianPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_cartesianshape(booleanField)', [ + 'Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(*)', [ + 'Using wildcards (*) in to_cartesianshape is not allowed', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(cartesianShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(keywordField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_string(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(textField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval to_cartesianshape(cartesianPointField, extraArg)', + ['Error: [to_cartesianshape] function expects exactly one argument, got 2.'] + ); + + testErrorsAndWarnings('from a_index | sort to_cartesianshape(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_cartesianshape(nullVar)', []); + }); + + describe('to_datetime', () => { + testErrorsAndWarnings('row var = to_datetime(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_datetime(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_dt(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = to_datetime(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = to_datetime(5.5)', []); + testErrorsAndWarnings('row to_datetime(5.5)', []); + testErrorsAndWarnings('row var = to_dt(5.5)', []); + testErrorsAndWarnings('row var = to_datetime(to_double(true))', []); + testErrorsAndWarnings('row var = to_datetime(5)', []); + testErrorsAndWarnings('row to_datetime(5)', []); + testErrorsAndWarnings('row var = to_dt(5)', []); + testErrorsAndWarnings('row var = to_datetime(to_integer(true))', []); + testErrorsAndWarnings('row var = to_datetime("a")', []); + testErrorsAndWarnings('row to_datetime("a")', []); + testErrorsAndWarnings('row var = to_dt("a")', []); + testErrorsAndWarnings('row var = to_datetime(to_string(true))', []); + + testErrorsAndWarnings('row var = to_datetime(true)', [ + 'Argument of [to_datetime] must be [date], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_datetime(dateField))', []); + + testErrorsAndWarnings('from a_index | eval to_datetime(booleanField)', [ + 'Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(*)', [ + 'Using wildcards (*) in to_datetime is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_datetime(to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_datetime(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(longField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(textField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_datetime(dateField, extraArg)', [ + 'Error: [to_datetime] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_datetime(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_datetime("2022")', []); + testErrorsAndWarnings('from a_index | eval to_datetime(concat("20", "22"))', []); + }); + + describe('to_degrees', () => { + testErrorsAndWarnings('row var = to_degrees(5.5)', []); + testErrorsAndWarnings('row to_degrees(5.5)', []); + testErrorsAndWarnings('row var = to_degrees(to_double(true))', []); + testErrorsAndWarnings('row var = to_degrees(5)', []); + testErrorsAndWarnings('row to_degrees(5)', []); + testErrorsAndWarnings('row var = to_degrees(to_integer(true))', []); + + testErrorsAndWarnings('row var = to_degrees(true)', [ + 'Argument of [to_degrees] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where to_degrees(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_degrees(booleanField) > 0', [ + 'Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where to_degrees(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_degrees(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_degrees(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_degrees(booleanField)', [ + 'Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_degrees(*)', [ + 'Using wildcards (*) in to_degrees is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_degrees(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(longField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_degrees(doubleField, extraArg)', [ + 'Error: [to_degrees] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_degrees(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_degrees(nullVar)', []); + }); + + describe('to_double', () => { + testErrorsAndWarnings('row var = to_double(true)', []); + testErrorsAndWarnings('row to_double(true)', []); + testErrorsAndWarnings('row var = to_dbl(true)', []); + testErrorsAndWarnings('row var = to_double(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_double(5.5)', []); + testErrorsAndWarnings('row to_double(5.5)', []); + testErrorsAndWarnings('row var = to_dbl(5.5)', []); + testErrorsAndWarnings('row var = to_double(5)', []); + testErrorsAndWarnings('row to_double(5)', []); + testErrorsAndWarnings('row var = to_dbl(5)', []); + testErrorsAndWarnings('row var = to_double(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_double(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_dbl(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = to_double(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = to_double(to_double(true))', []); + testErrorsAndWarnings('row var = to_double(to_integer(true))', []); + testErrorsAndWarnings('row var = to_double("a")', []); + testErrorsAndWarnings('row to_double("a")', []); + testErrorsAndWarnings('row var = to_dbl("a")', []); + testErrorsAndWarnings('row var = to_double(to_string(true))', []); + + testErrorsAndWarnings('row var = to_double(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_double] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_double(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_double(cartesianPointField) > 0', [ + 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_double(counterDoubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(counterIntegerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(counterLongField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(textField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_double(cartesianPointField)', [ + 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_double(*)', [ + 'Using wildcards (*) in to_double is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_double(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | eval to_double(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval to_double(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval to_double(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_double(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_double(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_double(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_double(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(longField)', []); + testErrorsAndWarnings('from a_index | eval to_double(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(textField)', []); + testErrorsAndWarnings('from a_index | eval to_double(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_double(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_double(booleanField, extraArg)', [ + 'Error: [to_double] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_double(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_double(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_double("2022")', []); + testErrorsAndWarnings('from a_index | eval to_double(concat("20", "22"))', []); + }); + + describe('to_geopoint', () => { + testErrorsAndWarnings('row var = to_geopoint(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row to_geopoint(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = to_geopoint(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_geopoint("a")', []); + testErrorsAndWarnings('row to_geopoint("a")', []); + testErrorsAndWarnings('row var = to_geopoint(to_string(true))', []); + + testErrorsAndWarnings('row var = to_geopoint(true)', [ + 'Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_geopoint(to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_geopoint(booleanField)', [ + 'Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(*)', [ + 'Using wildcards (*) in to_geopoint is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_geopoint(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_geopoint(textField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(textField)', []); + + testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField, extraArg)', [ + 'Error: [to_geopoint] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_geopoint(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_geopoint(nullVar)', []); + }); + + describe('to_geoshape', () => { + testErrorsAndWarnings('row var = to_geoshape(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row to_geoshape(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = to_geoshape(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_geoshape(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_geoshape("a")', []); + testErrorsAndWarnings('row to_geoshape("a")', []); + testErrorsAndWarnings('row var = to_geoshape(to_string(true))', []); + + testErrorsAndWarnings('row var = to_geoshape(true)', [ + 'Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_geoshape(to_geopoint(geoPointField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(booleanField)', [ + 'Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geoshape(*)', [ + 'Using wildcards (*) in to_geoshape is not allowed', + ]); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = to_geoshape(to_geoshape(geoPointField))', [] ); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(textField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(textField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_geoshape(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_version(stringField))', []); - - testErrorsAndWarnings('from a_index | eval mv_last(booleanField, extraArg)', [ - 'Error: [mv_last] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField, extraArg)', [ + 'Error: [to_geoshape] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort mv_last(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_last(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_geoshape(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_geoshape(nullVar)', []); }); - 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)', []); + describe('to_integer', () => { + testErrorsAndWarnings('row var = to_integer(true)', []); + testErrorsAndWarnings('row to_integer(true)', []); + testErrorsAndWarnings('row var = to_int(true)', []); + testErrorsAndWarnings('row var = to_integer(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_integer(5)', []); + testErrorsAndWarnings('row to_integer(5)', []); + testErrorsAndWarnings('row var = to_int(5)', []); + testErrorsAndWarnings('row var = to_integer(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_integer(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_int(to_datetime("2021-01-01T00:00:00Z"))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(*)', [ - 'Using wildcards (*) in mv_max is not allowed', - ]); + testErrorsAndWarnings( + 'row var = to_integer(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); - testErrorsAndWarnings('from a_index | sort mv_max(stringField)', []); - testErrorsAndWarnings('row var = mv_max(true)', []); - testErrorsAndWarnings('row mv_max(true)', []); - testErrorsAndWarnings('row var = mv_max(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_max(now())', []); - testErrorsAndWarnings('row mv_max(now())', []); - testErrorsAndWarnings('row var = mv_max(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_max(5)', []); - testErrorsAndWarnings('row mv_max(5)', []); - testErrorsAndWarnings('row var = mv_max(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_max(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_max(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_max(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_max(to_string(true))', []); - testErrorsAndWarnings('row var = mv_max(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_max(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_max(to_version("a"))', []); + testErrorsAndWarnings('row var = to_integer(5.5)', []); + testErrorsAndWarnings('row to_integer(5.5)', []); + testErrorsAndWarnings('row var = to_int(5.5)', []); + testErrorsAndWarnings('row var = to_integer(to_double(true))', []); + testErrorsAndWarnings('row var = to_integer(to_integer(true))', []); + testErrorsAndWarnings('row var = to_integer("a")', []); + testErrorsAndWarnings('row to_integer("a")', []); + testErrorsAndWarnings('row var = to_int("a")', []); + testErrorsAndWarnings('row var = to_integer(to_string(true))', []); - testErrorsAndWarnings('row var = mv_max(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [mv_max] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('row var = to_integer(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_integer] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where mv_max(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(booleanField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_max(cartesianPointField) > 0', [ - 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where to_integer(cartesianPointField) > 0', [ + 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where length(mv_max(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(counterIntegerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(textField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | where length(mv_max(cartesianPointField)) > 0', [ - 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval to_integer(cartesianPointField)', [ + 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_max(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_boolean(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval mv_max(cartesianPointField)', [ - 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = to_integer(*)', [ + 'Using wildcards (*) in to_integer is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = mv_max(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_version(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(longField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(textField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(booleanField, extraArg)', [ - 'Error: [mv_max] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval to_integer(booleanField, extraArg)', [ + 'Error: [to_integer] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort mv_max(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_max(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_integer(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_integer("2022")', []); + testErrorsAndWarnings('from a_index | eval to_integer(concat("20", "22"))', []); }); - describe('mv_median', () => { - testErrorsAndWarnings('row var = mv_median(5)', []); - testErrorsAndWarnings('row mv_median(5)', []); - testErrorsAndWarnings('row var = mv_median(to_integer("a"))', []); + describe('to_ip', () => { + testErrorsAndWarnings('row var = to_ip(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row to_ip(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_ip(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = to_ip("a")', []); + testErrorsAndWarnings('row to_ip("a")', []); + testErrorsAndWarnings('row var = to_ip(to_string(true))', []); - testErrorsAndWarnings('row var = mv_median("a")', [ - 'Argument of [mv_median] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = to_ip(true)', [ + 'Argument of [to_ip] must be [ip], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where mv_median(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(to_ip(ipField))', []); + + testErrorsAndWarnings('from a_index | eval to_ip(booleanField)', [ + 'Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings('from a_index | where mv_median(stringField) > 0', [ - 'Argument of [mv_median] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval var = to_ip(*)', [ + 'Using wildcards (*) in to_ip is not allowed', ]); - 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 var = to_ip(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(textField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(textField)', []); - 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 to_ip(ipField, extraArg)', [ + 'Error: [to_ip] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | eval mv_median(numberField, extraArg)', [ - 'Error: [mv_median] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | sort to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_ip(nullVar)', []); + }); + + describe('to_long', () => { + testErrorsAndWarnings('row var = to_long(true)', []); + testErrorsAndWarnings('row to_long(true)', []); + testErrorsAndWarnings('row var = to_long(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_long(5)', []); + testErrorsAndWarnings('row to_long(5)', []); + testErrorsAndWarnings('row var = to_long(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_long(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = to_long(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = to_long(5.5)', []); + testErrorsAndWarnings('row to_long(5.5)', []); + testErrorsAndWarnings('row var = to_long(to_double(true))', []); + testErrorsAndWarnings('row var = to_long(to_integer(true))', []); + testErrorsAndWarnings('row var = to_long("a")', []); + testErrorsAndWarnings('row to_long("a")', []); + testErrorsAndWarnings('row var = to_long(to_string(true))', []); + + testErrorsAndWarnings('row var = to_long(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_median(*)', [ - 'Using wildcards (*) in mv_median is not allowed', + testErrorsAndWarnings('from a_index | where to_long(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_long(cartesianPointField) > 0', [ + 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | sort mv_median(numberField)', []); - testErrorsAndWarnings('row var = mv_median(to_integer(true))', []); + testErrorsAndWarnings('from a_index | where to_long(counterIntegerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(counterLongField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(textField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_boolean(booleanField))', []); - testErrorsAndWarnings('row var = mv_median(true)', [ - 'Argument of [mv_median] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval to_long(cartesianPointField)', [ + 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where mv_median(booleanField) > 0', [ - 'Argument of [mv_median] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = to_long(*)', [ + 'Using wildcards (*) in to_long is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = mv_median(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval to_long(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval to_long(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(longField)', []); + testErrorsAndWarnings('from a_index | eval to_long(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(textField)', []); + testErrorsAndWarnings('from a_index | eval to_long(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_long(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval mv_median(booleanField)', [ - 'Argument of [mv_median] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval to_long(booleanField, extraArg)', [ + 'Error: [to_long] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | eval mv_median(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_median(nullVar)', []); + + testErrorsAndWarnings('from a_index | sort to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_long(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_long(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_long("2022")', []); + testErrorsAndWarnings('from a_index | eval to_long(concat("20", "22"))', []); }); - 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)', []); + describe('to_lower', () => { + testErrorsAndWarnings('row var = to_lower("a")', []); + testErrorsAndWarnings('row to_lower("a")', []); + testErrorsAndWarnings('row var = to_lower(to_string(true))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(*)', [ - 'Using wildcards (*) in mv_min is not allowed', + testErrorsAndWarnings('row var = to_lower(true)', [ + 'Argument of [to_lower] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort mv_min(stringField)', []); - testErrorsAndWarnings('row var = mv_min(true)', []); - testErrorsAndWarnings('row mv_min(true)', []); - testErrorsAndWarnings('row var = mv_min(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_min(now())', []); - testErrorsAndWarnings('row mv_min(now())', []); - testErrorsAndWarnings('row var = mv_min(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_min(5)', []); - testErrorsAndWarnings('row mv_min(5)', []); - testErrorsAndWarnings('row var = mv_min(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_min(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_min(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_min(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_min(to_string(true))', []); - testErrorsAndWarnings('row var = mv_min(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_min(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_min(to_version("a"))', []); + testErrorsAndWarnings('from a_index | eval var = to_lower(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_lower(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_lower(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_lower(booleanField)', [ + 'Argument of [to_lower] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_lower(*)', [ + 'Using wildcards (*) in to_lower is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_lower(textField)', []); + testErrorsAndWarnings('from a_index | eval to_lower(textField)', []); + + testErrorsAndWarnings('from a_index | eval to_lower(keywordField, extraArg)', [ + 'Error: [to_lower] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_lower(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_lower(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_lower(nullVar)', []); + }); + + describe('to_radians', () => { + testErrorsAndWarnings('row var = to_radians(5.5)', []); + testErrorsAndWarnings('row to_radians(5.5)', []); + testErrorsAndWarnings('row var = to_radians(to_double(true))', []); + testErrorsAndWarnings('row var = to_radians(5)', []); + testErrorsAndWarnings('row to_radians(5)', []); + testErrorsAndWarnings('row var = to_radians(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_min(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [mv_min] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('row var = to_radians(true)', [ + 'Argument of [to_radians] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where mv_min(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_min(cartesianPointField) > 0', [ - 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where to_radians(booleanField) > 0', [ + 'Argument of [to_radians] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where length(mv_min(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | where length(mv_min(cartesianPointField)) > 0', [ - 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval to_radians(booleanField)', [ + 'Argument of [to_radians] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_min(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_boolean(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval mv_min(cartesianPointField)', [ - 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = to_radians(*)', [ + 'Using wildcards (*) in to_radians is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = mv_min(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_version(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(longField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(booleanField, extraArg)', [ - 'Error: [mv_min] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval to_radians(doubleField, extraArg)', [ + 'Error: [to_radians] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort mv_min(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_min(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_radians(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_radians(nullVar)', []); }); - describe('mv_slice', () => { - testErrorsAndWarnings('row var = mv_slice("a", 5, 5)', []); - testErrorsAndWarnings('row mv_slice("a", 5, 5)', []); - + describe('to_unsigned_long', () => { + testErrorsAndWarnings('row var = to_unsigned_long(true)', []); + testErrorsAndWarnings('row to_unsigned_long(true)', []); + testErrorsAndWarnings('row var = to_ul(true)', []); + testErrorsAndWarnings('row var = to_ulong(true)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_boolean(true))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(stringField, numberField, numberField)', + 'row var = to_unsigned_long(to_datetime("2021-01-01T00:00:00Z"))', [] ); + testErrorsAndWarnings('row to_unsigned_long(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_ul(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_ulong(to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings( - 'from a_index | eval mv_slice(stringField, numberField, numberField)', - [] - ); - testErrorsAndWarnings( - 'from a_index | sort mv_slice(stringField, numberField, numberField)', + 'row var = to_unsigned_long(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', [] ); - testErrorsAndWarnings('row var = mv_slice(true, 5, 5)', []); - testErrorsAndWarnings('row mv_slice(true, 5, 5)', []); - testErrorsAndWarnings( - 'row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('row var = to_unsigned_long(5.5)', []); + testErrorsAndWarnings('row to_unsigned_long(5.5)', []); + testErrorsAndWarnings('row var = to_ul(5.5)', []); + testErrorsAndWarnings('row var = to_ulong(5.5)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_double(true))', []); + testErrorsAndWarnings('row var = to_unsigned_long(5)', []); + testErrorsAndWarnings('row to_unsigned_long(5)', []); + testErrorsAndWarnings('row var = to_ul(5)', []); + testErrorsAndWarnings('row var = to_ulong(5)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_integer(true))', []); + testErrorsAndWarnings('row var = to_unsigned_long("a")', []); + testErrorsAndWarnings('row to_unsigned_long("a")', []); + testErrorsAndWarnings('row var = to_ul("a")', []); + testErrorsAndWarnings('row var = to_ulong("a")', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_string(true))', []); - testErrorsAndWarnings('row var = mv_slice(to_cartesianpoint("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_cartesianpoint("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); - testErrorsAndWarnings( - 'row var = mv_slice(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('from a_index | where to_unsigned_long(booleanField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(booleanField)] type [unsigned_long]', + ]); - testErrorsAndWarnings('row var = mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('from a_index | where to_unsigned_long(cartesianPointField) > 0', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [>] must be [double], found value [to_unsigned_long(cartesianPointField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(dateField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(dateField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(doubleField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(doubleField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(integerField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(integerField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(keywordField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(keywordField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(longField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(longField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(textField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(textField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(unsignedLongField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(unsignedLongField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(booleanField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_boolean(booleanField))', [] ); - testErrorsAndWarnings('row var = mv_slice(now(), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(now(), 5, 5)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(cartesianPointField)', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); - testErrorsAndWarnings( - 'row var = mv_slice(to_datetime(now()), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(*)', [ + 'Using wildcards (*) in to_unsigned_long is not allowed', + ]); - testErrorsAndWarnings('row var = mv_slice(5, 5, 5)', []); - testErrorsAndWarnings('row mv_slice(5, 5, 5)', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(dateField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_datetime(dateField))', [] ); - testErrorsAndWarnings('row var = mv_slice(to_geopoint("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_geopoint("POINT (30 10)"), 5, 5)', []); - + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(doubleField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_geopoint(to_geopoint("POINT (30 10)")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_double(booleanField))', [] ); - - testErrorsAndWarnings('row var = mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); - + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(integerField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_geoshape(to_geopoint("POINT (30 10)")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_integer(booleanField))', [] ); - - testErrorsAndWarnings('row var = mv_slice(to_ip("127.0.0.1"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_ip("127.0.0.1"), 5, 5)', []); - + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(keywordField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_string(booleanField))', [] ); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(longField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(textField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(unsignedLongField)', []); - testErrorsAndWarnings( - 'row var = mv_slice(to_string(true), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField, extraArg)', [ + 'Error: [to_unsigned_long] function expects exactly one argument, got 2.', + ]); - testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_version("1.0.0"), 5, 5)', []); + testErrorsAndWarnings('from a_index | sort to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_unsigned_long(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long("2022")', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(concat("20", "22"))', []); + }); - testErrorsAndWarnings( - 'row var = mv_slice(to_version("a"), to_integer(true), to_integer(true))', - [] - ); + describe('to_upper', () => { + testErrorsAndWarnings('row var = to_upper("a")', []); + testErrorsAndWarnings('row to_upper("a")', []); + testErrorsAndWarnings('row var = to_upper(to_string(true))', []); - testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), true, true)', [ - 'Argument of [mv_slice] must be [number], found value [true] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('row var = to_upper(true)', [ + 'Argument of [to_upper] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings( - 'from a_index | where mv_slice(numberField, numberField, numberField) > 0', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_upper(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_upper(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_upper(to_string(booleanField))', []); - testErrorsAndWarnings( - 'from a_index | where mv_slice(numberField, booleanField, booleanField) > 0', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval to_upper(booleanField)', [ + 'Argument of [to_upper] must be [keyword], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings( - 'from a_index | where length(mv_slice(stringField, numberField, numberField)) > 0', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_upper(*)', [ + 'Using wildcards (*) in to_upper is not allowed', + ]); - testErrorsAndWarnings( - 'from a_index | where length(mv_slice(stringField, booleanField, booleanField)) > 0', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval var = to_upper(textField)', []); + testErrorsAndWarnings('from a_index | eval to_upper(textField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(booleanField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval to_upper(keywordField, extraArg)', [ + 'Error: [to_upper] function expects exactly one argument, got 2.', + ]); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(booleanField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | sort to_upper(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_upper(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_upper(nullVar)', []); + }); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + describe('to_version', () => { + testErrorsAndWarnings('row var = to_version("a")', []); + testErrorsAndWarnings('row to_version("a")', []); + testErrorsAndWarnings('row var = to_ver("a")', []); + testErrorsAndWarnings('row var = to_version(to_version("1.0.0"))', []); + testErrorsAndWarnings('row to_version(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_ver(to_version("1.0.0"))', []); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(booleanField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('row var = to_version(true)', [ + 'Argument of [to_version] must be [keyword], found value [true] type [boolean]', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(cartesianPointField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_version(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_version(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(keywordField)', []); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianPointField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_version(*)', [ + 'Using wildcards (*) in to_version is not allowed', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_version(textField)', []); + testErrorsAndWarnings('from a_index | eval to_version(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_version(versionField)', []); + testErrorsAndWarnings('from a_index | eval to_version(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(versionField)', []); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianPointField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval to_version(keywordField, extraArg)', [ + 'Error: [to_version] function expects exactly one argument, got 2.', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(cartesianShapeField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | sort to_version(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_version(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_version(nullVar)', []); + }); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianShapeField, numberField, numberField)', - [] - ); + describe('trim', () => { + testErrorsAndWarnings('row var = trim("a")', []); + testErrorsAndWarnings('row trim("a")', []); + testErrorsAndWarnings('row var = trim(to_string(true))', []); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('row var = trim(true)', [ + 'Argument of [trim] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval trim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = trim(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval trim(booleanField)', [ + 'Argument of [trim] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(*)', [ + 'Using wildcards (*) in trim is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(textField)', []); + testErrorsAndWarnings('from a_index | eval trim(textField)', []); + + testErrorsAndWarnings('from a_index | eval trim(keywordField, extraArg)', [ + 'Error: [trim] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort trim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval trim(null)', []); + testErrorsAndWarnings('row nullVar = null | eval trim(nullVar)', []); + }); + + describe('case', () => { + testErrorsAndWarnings('row var = case(true, "a")', []); + testErrorsAndWarnings('row case(true, "a")', []); + + testErrorsAndWarnings('row var = case(to_cartesianpoint("POINT (30 10)"), true)', [ + 'Argument of [case] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = case(booleanField, textField)', []); + testErrorsAndWarnings('from a_index | eval case(booleanField, textField)', []); + testErrorsAndWarnings('from a_index | sort case(booleanField, textField)', []); + testErrorsAndWarnings('from a_index | eval case(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval case(nullVar, nullVar)', []); + }); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianShapeField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + describe('avg', () => { + testErrorsAndWarnings('from a_index | stats var = avg(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(integerField))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(dateField, numberField, numberField)', + 'from a_index | stats var = round(avg(integerField)) + avg(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(dateField, numberField, numberField)', + 'from a_index | stats round(avg(integerField)) + avg(integerField)', [] ); - + testErrorsAndWarnings('from a_index | stats avg(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = avg(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(doubleField / 2)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(doubleField / 2)', [] ); - - testErrorsAndWarnings( - 'from a_index | eval mv_slice(dateField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); - + testErrorsAndWarnings('from a_index | stats var0 = avg(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(integerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(numberField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = avg(integerField)', [] ); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(numberField, numberField, numberField)', + 'from a_index | stats avg(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats var0 = avg(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(numberField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(geoPointField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoPointField, numberField, numberField)', + 'from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoPointField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | stats var = avg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(geoShapeField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | stats avg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoShapeField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | stats avg(booleanField)', [ + 'Argument of [avg] must be [integer], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('from a_index | stats var = avg(*)', [ + 'Using wildcards (*) in avg is not allowed', + ]); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoShapeField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | stats var = avg(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats avg(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(counterIntegerField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(counterIntegerField))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(ipField, numberField, numberField)', + 'from a_index | stats var = round(avg(counterIntegerField)) + avg(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(ipField, numberField, numberField)', + 'from a_index | stats round(avg(counterIntegerField)) + avg(counterIntegerField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = avg(counterIntegerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterIntegerField)', [] ); - testErrorsAndWarnings('from a_index | eval mv_slice(ipField, booleanField, booleanField)', [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(stringField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); - - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(versionField, numberField, numberField)', + 'from a_index | stats avg(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(versionField, numberField, numberField)', + 'from a_index | stats var0 = avg(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_version(stringField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(versionField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(booleanField, numberField, numberField, extraArg)', - ['Error: [mv_slice] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | sort mv_slice(booleanField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval mv_slice(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)', []); - }); - - 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")', []); - testErrorsAndWarnings('row var = mv_sort(true, "asc")', []); - testErrorsAndWarnings('row mv_sort(true, "asc")', []); - testErrorsAndWarnings('row var = mv_sort(now(), "asc")', []); - testErrorsAndWarnings('row mv_sort(now(), "asc")', []); - testErrorsAndWarnings('row var = mv_sort(5, "asc")', []); - testErrorsAndWarnings('row mv_sort(5, "asc")', []); - testErrorsAndWarnings('row var = mv_sort(to_ip("127.0.0.1"), "asc")', []); - testErrorsAndWarnings('row mv_sort(to_ip("127.0.0.1"), "asc")', []); - testErrorsAndWarnings('row var = mv_sort(to_version("1.0.0"), "asc")', []); - testErrorsAndWarnings('row mv_sort(to_version("1.0.0"), "asc")', []); - - testErrorsAndWarnings('row var = mv_sort(to_cartesianpoint("POINT (30 10)"), true)', [ - 'Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', - 'Argument of [mv_sort] must be [string], found value [true] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | where mv_sort(numberField, "asc") > 0', []); + testErrorsAndWarnings('from a_index | stats var = avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(doubleField))', []); testErrorsAndWarnings( - 'from a_index | where mv_sort(cartesianPointField, booleanField) > 0', - [ - 'Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats var = round(avg(doubleField)) + avg(doubleField)', + [] ); - testErrorsAndWarnings('from a_index | where length(mv_sort(stringField, "asc")) > 0', []); - testErrorsAndWarnings( - 'from a_index | where length(mv_sort(cartesianPointField, booleanField)) > 0', - [ - 'Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats round(avg(doubleField)) + avg(doubleField)', + [] ); - - testErrorsAndWarnings('from a_index | eval var = mv_sort(booleanField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(dateField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(dateField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(numberField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(numberField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(ipField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(ipField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(versionField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(versionField, "asc")', []); - - testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc", extraArg)', [ - 'Error: [mv_sort] function expects no more than 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort mv_sort(booleanField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_sort(nullVar, nullVar)', []); - }); - - 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)', []); - testErrorsAndWarnings('row var = mv_sum(to_integer(true))', []); - - testErrorsAndWarnings('row var = mv_sum(true)', [ - 'Argument of [mv_sum] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where mv_sum(booleanField) > 0', [ - 'Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = mv_sum(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval mv_sum(booleanField)', [ - 'Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval mv_sum(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_sum(nullVar)', []); - }); - - describe('mv_zip', () => { - testErrorsAndWarnings('row var = mv_zip("a", "a", "a")', []); - testErrorsAndWarnings('row var = mv_zip("a", "a")', []); - testErrorsAndWarnings('row mv_zip("a", "a", "a")', []); - testErrorsAndWarnings('row mv_zip("a", "a")', []); - + testErrorsAndWarnings('from a_index | stats var0 = avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = avg(doubleField)', []); testErrorsAndWarnings( - 'row var = mv_zip(to_string("a"), to_string("a"), to_string("a"))', + 'from a_index | stats avg(doubleField) by round(doubleField / 2)', [] ); - 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', + 'from a_index | stats var0 = avg(doubleField) by var1 = round(doubleField / 2)', [] ); 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]', - ] + 'from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(stringField, stringField, stringField)', + 'from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval mv_zip(stringField, stringField)', []); - testErrorsAndWarnings( - 'from a_index | eval mv_zip(stringField, stringField, stringField)', + 'from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))', + 'from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - 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 | stats var = avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(unsignedLongField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(unsignedLongField))', []); testErrorsAndWarnings( - 'from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)', - ['Error: [mv_zip] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats var = round(avg(unsignedLongField)) + avg(unsignedLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | sort mv_zip(stringField, stringField, stringField)', + 'from a_index | stats round(avg(unsignedLongField)) + avg(unsignedLongField)', [] ); + + testErrorsAndWarnings('from a_index | stats var0 = avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(unsignedLongField)', []); testErrorsAndWarnings( - 'row var = mv_zip(to_string(true), to_string(true), to_string(true))', + 'from a_index | stats avg(doubleField), var0 = avg(unsignedLongField)', [] ); - testErrorsAndWarnings('row var = mv_zip(true, true, true)', [ - 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | where length(mv_zip(booleanField, booleanField, booleanField)) > 0', - [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(unsignedLongField) by round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + 'from a_index | stats var0 = avg(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_zip(booleanField, booleanField, booleanField)', - [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), ipField', + [] ); - testErrorsAndWarnings('from a_index | eval mv_zip(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)', []); - testErrorsAndWarnings('row var = mv_zip(to_string(true), to_string(true))', []); + testErrorsAndWarnings( - 'from a_index | where length(mv_zip(stringField, stringField)) > 0', + 'from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | where length(mv_zip(booleanField, booleanField)) > 0', - [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | eval var = mv_zip(stringField, stringField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval mv_zip(booleanField, booleanField)', [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | sort mv_zip(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()', []); - testErrorsAndWarnings('row nullVar = null | eval 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()', []); - testErrorsAndWarnings('row nullVar = null | eval 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 | stats var = avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(longField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(longField))', []); testErrorsAndWarnings( - 'from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))', + 'from a_index | stats var = round(avg(longField)) + avg(longField)', [] ); - - 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)', []); - testErrorsAndWarnings('row var = pow(to_integer(true), to_integer(true))', []); - - testErrorsAndWarnings('row var = pow(true, true)', [ - 'Argument of [pow] must be [number], found value [true] type [boolean]', - 'Argument of [pow] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where pow(booleanField, booleanField) > 0', [ - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats round(avg(longField)) + avg(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats var0 = avg(longField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval pow(booleanField, booleanField)', [ - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval pow(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval pow(nullVar, nullVar)', []); - }); - - 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"))', + 'from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), ipField', [] ); - 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', + 'from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), ipField', [] ); 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]', - ] + 'from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = replace(stringField, stringField, stringField)', + 'from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = avg(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(counterLongField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(counterLongField))', []); + testErrorsAndWarnings( - 'from a_index | eval replace(stringField, stringField, stringField)', + 'from a_index | stats var = round(avg(counterLongField)) + avg(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))', + 'from a_index | stats round(avg(counterLongField)) + avg(counterLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = avg(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(counterLongField)', []); 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]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterLongField)', + [] ); - testErrorsAndWarnings( - 'from a_index | eval replace(stringField, stringField, stringField, extraArg)', - ['Error: [replace] function expects exactly 3 arguments, got 4.'] + 'from a_index | stats avg(counterLongField) by round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | sort replace(stringField, stringField, stringField)', + 'from a_index | stats var0 = avg(counterLongField) by var1 = round(doubleField / 2)', [] ); + testErrorsAndWarnings( - 'row var = replace(to_string(true), to_string(true), to_string(true))', + 'from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('row var = replace(true, true, true)', [ - 'Argument of [replace] must be [string], found value [true] type [boolean]', - 'Argument of [replace] must be [string], found value [true] type [boolean]', - 'Argument of [replace] must be [string], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | where length(replace(booleanField, booleanField, booleanField)) > 0', - [ - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval replace(booleanField, booleanField, booleanField)', - [ - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | eval replace(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval replace(nullVar, nullVar, nullVar)', []); - }); - 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 | stats var = avg(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(counterDoubleField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(counterDoubleField))', []); testErrorsAndWarnings( - 'from a_index | where length(right(stringField, numberField)) > 0', + 'from a_index | stats var = round(avg(counterDoubleField)) + avg(counterDoubleField)', [] ); - 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))', + 'from a_index | stats round(avg(counterDoubleField)) + avg(counterDoubleField)', [] ); - 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)', []); - testErrorsAndWarnings('row var = right(to_string(true), to_integer(true))', []); - - testErrorsAndWarnings('row var = right(true, true)', [ - 'Argument of [right] must be [string], found value [true] type [boolean]', - 'Argument of [right] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats var0 = avg(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(counterDoubleField)', []); testErrorsAndWarnings( - 'from a_index | where length(right(booleanField, booleanField)) > 0', - [ - 'Argument of [right] must be [string], found value [booleanField] type [boolean]', - 'Argument of [right] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterDoubleField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(counterDoubleField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval right(booleanField, booleanField)', [ - 'Argument of [right] must be [string], found value [booleanField] type [boolean]', - 'Argument of [right] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval right(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval right(nullVar, nullVar)', []); - }); - - 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))', + 'from a_index | stats var0 = avg(counterDoubleField) by var1 = round(doubleField / 2)', [] ); - 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)', []); - testErrorsAndWarnings('row var = round(5)', []); - testErrorsAndWarnings('row round(5)', []); - testErrorsAndWarnings('row var = round(to_integer(true))', []); - testErrorsAndWarnings('row var = round(to_integer(true), to_integer(true))', []); - - testErrorsAndWarnings('row var = round(true, true)', [ - 'Argument of [round] must be [number], found value [true] type [boolean]', - 'Argument of [round] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where round(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where round(booleanField) > 0', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where round(booleanField, booleanField) > 0', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = round(numberField)', []); - testErrorsAndWarnings('from a_index | eval round(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = round(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval round(booleanField)', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = round(*)', [ - 'Using wildcards (*) in round is not allowed', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval round(booleanField, booleanField)', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | sort round(numberField)', []); - testErrorsAndWarnings('from a_index | eval round(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval round(nullVar, nullVar)', []); - }); - - 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)', []); - testErrorsAndWarnings('row var = rtrim(to_string(true))', []); - - testErrorsAndWarnings('row var = rtrim(true)', [ - 'Argument of [rtrim] must be [string], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where length(rtrim(booleanField)) > 0', [ - 'Argument of [rtrim] must be [string], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = rtrim(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval rtrim(booleanField)', [ - 'Argument of [rtrim] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval rtrim(null)', []); - testErrorsAndWarnings('row nullVar = null | eval rtrim(nullVar)', []); - }); - - 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 | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval signum(stringField)', [ - 'Argument of [signum] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval signum(numberField, extraArg)', [ - 'Error: [signum] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval var = signum(*)', [ - 'Using wildcards (*) in signum is not allowed', + testErrorsAndWarnings('from a_index | sort avg(integerField)', [ + 'SORT does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort signum(numberField)', []); - testErrorsAndWarnings('row var = signum(to_integer(true))', []); - - testErrorsAndWarnings('row var = signum(true)', [ - 'Argument of [signum] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(integerField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | where signum(booleanField) > 0', [ - 'Argument of [signum] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(integerField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = signum(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval signum(booleanField)', [ - 'Argument of [signum] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(counterIntegerField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval signum(null)', []); - testErrorsAndWarnings('row nullVar = null | eval signum(nullVar)', []); - }); - - 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 avg(counterIntegerField) > 0', [ + 'WHERE does not support function avg', ]); - 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 | where avg(doubleField)', [ + 'WHERE does not support function avg', ]); - 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 | where avg(doubleField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sin(numberField, extraArg)', [ - 'Error: [sin] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where avg(unsignedLongField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sin(*)', [ - 'Using wildcards (*) in sin is not allowed', + testErrorsAndWarnings('from a_index | where avg(unsignedLongField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort sin(numberField)', []); - testErrorsAndWarnings('row var = sin(to_integer(true))', []); - - testErrorsAndWarnings('row var = sin(true)', [ - 'Argument of [sin] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(longField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sin(booleanField) > 0', [ - 'Argument of [sin] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(longField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sin(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval sin(booleanField)', [ - 'Argument of [sin] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(counterLongField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sin(null)', []); - testErrorsAndWarnings('row nullVar = null | eval sin(nullVar)', []); - }); - - 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 avg(counterLongField) > 0', [ + 'WHERE does not support function avg', ]); - 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 | where avg(counterDoubleField)', [ + 'WHERE does not support function avg', ]); - 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 | where avg(counterDoubleField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sinh(numberField, extraArg)', [ - 'Error: [sinh] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = avg(integerField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sinh(*)', [ - 'Using wildcards (*) in sinh is not allowed', + testErrorsAndWarnings('from a_index | eval var = avg(integerField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort sinh(numberField)', []); - testErrorsAndWarnings('row var = sinh(to_integer(true))', []); - - testErrorsAndWarnings('row var = sinh(true)', [ - 'Argument of [sinh] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(integerField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sinh(booleanField) > 0', [ - 'Argument of [sinh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(integerField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sinh(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval sinh(booleanField)', [ - 'Argument of [sinh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(counterIntegerField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sinh(null)', []); - testErrorsAndWarnings('row nullVar = null | eval sinh(nullVar)', []); - }); - - 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 | eval var = avg(counterIntegerField) > 0', [ + 'EVAL does not support function avg', ]); - 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 avg(counterIntegerField)', [ + 'EVAL does not support function avg', ]); - 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 avg(counterIntegerField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval split(stringField, stringField, extraArg)', [ - 'Error: [split] function expects exactly 2 arguments, got 3.', + testErrorsAndWarnings('from a_index | eval var = avg(doubleField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort split(stringField, stringField)', []); - testErrorsAndWarnings('row var = split(to_string(true), to_string(true))', []); - - testErrorsAndWarnings('row var = split(true, true)', [ - 'Argument of [split] must be [string], found value [true] type [boolean]', - 'Argument of [split] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(doubleField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings( - 'from a_index | where length(split(booleanField, booleanField)) > 0', - [ - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', - ] - ); - - testErrorsAndWarnings( - 'from a_index | eval var = split(to_string(booleanField), to_string(booleanField))', - [] - ); - - testErrorsAndWarnings('from a_index | eval split(booleanField, booleanField)', [ - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(doubleField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval split(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval split(nullVar, nullVar)', []); - }); - describe('sqrt', () => { - testErrorsAndWarnings('row var = sqrt(5)', []); - testErrorsAndWarnings('row sqrt(5)', []); - testErrorsAndWarnings('row var = sqrt(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | eval avg(doubleField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = sqrt("a")', [ - 'Argument of [sqrt] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval var = avg(unsignedLongField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sqrt(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = avg(unsignedLongField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('from a_index | where sqrt(stringField) > 0', [ - 'Argument of [sqrt] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval avg(unsignedLongField)', [ + 'EVAL does not support function avg', ]); - 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 avg(unsignedLongField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('from a_index | eval sqrt(stringField)', [ - 'Argument of [sqrt] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval var = avg(longField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sqrt(numberField, extraArg)', [ - 'Error: [sqrt] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = avg(longField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sqrt(*)', [ - 'Using wildcards (*) in sqrt is not allowed', + testErrorsAndWarnings('from a_index | eval avg(longField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort sqrt(numberField)', []); - testErrorsAndWarnings('row var = sqrt(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval avg(longField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = sqrt(true)', [ - 'Argument of [sqrt] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(counterLongField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sqrt(booleanField) > 0', [ - 'Argument of [sqrt] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(counterLongField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sqrt(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval avg(counterLongField)', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('from a_index | eval sqrt(booleanField)', [ - 'Argument of [sqrt] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(counterLongField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sqrt(null)', []); - testErrorsAndWarnings('row nullVar = null | eval sqrt(nullVar)', []); - }); - describe('st_contains', () => { - testErrorsAndWarnings( - 'row var = st_contains(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = avg(counterDoubleField)', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings( - 'row st_contains(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = avg(counterDoubleField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = st_contains(to_geopoint("a"), to_geopoint("a"))', []); + testErrorsAndWarnings('from a_index | eval avg(counterDoubleField)', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = st_contains("a", "a")', [ - 'Argument of [st_contains] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_contains] must be [cartesian_point], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval avg(counterDoubleField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings( - 'row var = st_contains(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | stats avg(null)', []); + testErrorsAndWarnings('row nullVar = null | stats avg(nullVar)', []); + }); + + describe('sum', () => { + testErrorsAndWarnings('from a_index | stats var = sum(integerField)', []); + testErrorsAndWarnings('from a_index | stats sum(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(integerField))', []); testErrorsAndWarnings( - 'row st_contains(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var = round(sum(integerField)) + sum(integerField)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats round(sum(integerField)) + sum(integerField)', [] ); - + testErrorsAndWarnings('from a_index | stats sum(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = sum(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(doubleField / 2)', [] ); - + testErrorsAndWarnings('from a_index | stats var0 = sum(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(integerField)', []); testErrorsAndWarnings( - 'row st_contains(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(integerField)', [] ); - testErrorsAndWarnings( - 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats sum(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var0 = sum(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("a"), to_cartesianpoint("a"))', + 'from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = sum(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); + + testErrorsAndWarnings('from a_index | stats sum(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); + + testErrorsAndWarnings('from a_index | stats sum(booleanField)', [ + 'Argument of [sum] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | stats var = sum(*)', [ + 'Using wildcards (*) in sum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | stats var = sum(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats sum(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(counterIntegerField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(counterIntegerField))', []); + testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(sum(counterIntegerField)) + sum(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(sum(counterIntegerField)) + sum(counterIntegerField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(counterIntegerField)', []); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats sum(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats var0 = sum(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoPointField, geoPointField)', + 'from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(stringField, stringField)', [ - 'Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | stats var = sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(doubleField))', []); testErrorsAndWarnings( - 'from a_index | eval st_contains(geoPointField, geoPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var = round(sum(doubleField)) + sum(doubleField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoPointField, geoShapeField)', + 'from a_index | stats round(sum(doubleField)) + sum(doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoShapeField)', []); - + testErrorsAndWarnings('from a_index | stats var0 = sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = sum(doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats sum(doubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var0 = sum(doubleField) by var1 = round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoShapeField, geoPointField)', + 'from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoShapeField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - 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 | stats var = sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(unsignedLongField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(unsignedLongField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)', + 'from a_index | stats var = round(sum(unsignedLongField)) + sum(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianPointField)', + 'from a_index | stats round(sum(unsignedLongField)) + sum(unsignedLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(unsignedLongField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = sum(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats sum(unsignedLongField) by round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)', + 'from a_index | stats var0 = sum(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = sum(longField)', []); + testErrorsAndWarnings('from a_index | stats sum(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(longField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(longField))', []); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField)', + 'from a_index | stats var = round(sum(longField)) + sum(longField)', [] ); + testErrorsAndWarnings('from a_index | stats round(sum(longField)) + sum(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = sum(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = sum(longField)', []); + testErrorsAndWarnings('from a_index | stats sum(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var0 = sum(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort st_contains(geoPointField, geoPointField)', []); + testErrorsAndWarnings('from a_index | stats var = sum(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats sum(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(counterLongField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(counterLongField))', []); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(sum(counterLongField)) + sum(counterLongField)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(sum(counterLongField)) + sum(counterLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(counterLongField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = sum(counterLongField)', + [] + ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats sum(counterLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var0 = sum(counterLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_contains(true, true)', [ - 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats var = sum(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats sum(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(counterDoubleField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(counterDoubleField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats var = round(sum(counterDoubleField)) + sum(counterDoubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(booleanField, booleanField)', [ - 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats round(sum(counterDoubleField)) + sum(counterDoubleField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(counterDoubleField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = sum(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats sum(counterDoubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats var0 = sum(counterDoubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | sort st_contains(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_contains(nullVar, nullVar)', []); + + testErrorsAndWarnings('from a_index | sort sum(integerField)', [ + 'SORT does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(integerField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(integerField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterIntegerField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterIntegerField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(doubleField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(doubleField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(unsignedLongField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(unsignedLongField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(longField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(longField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterLongField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterLongField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterDoubleField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterDoubleField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(integerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(integerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(integerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(integerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterIntegerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterIntegerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterIntegerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterIntegerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(doubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(doubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(doubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(doubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(unsignedLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(unsignedLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(unsignedLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(unsignedLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(longField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(longField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(longField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(longField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterDoubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterDoubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterDoubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterDoubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | stats sum(null)', []); + testErrorsAndWarnings('row nullVar = null | stats sum(nullVar)', []); }); - describe('st_disjoint', () => { + describe('median', () => { + testErrorsAndWarnings('from a_index | stats var = median(integerField)', []); + testErrorsAndWarnings('from a_index | stats median(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(median(integerField))', []); + testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var = round(median(integerField)) + median(integerField)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats round(median(integerField)) + median(integerField)', [] ); - testErrorsAndWarnings('row var = st_disjoint(to_geopoint("a"), to_geopoint("a"))', []); - - testErrorsAndWarnings('row var = st_disjoint("a", "a")', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_disjoint] must be [cartesian_point], found value ["a"] type [string]', - ]); + testErrorsAndWarnings('from a_index | stats median(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = median(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(doubleField / 2)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(integerField)', []); testErrorsAndWarnings( - 'row st_disjoint(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(integerField)', [] ); - testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats median(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var0 = median(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | stats var = median(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'row st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | stats median(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("a"), to_cartesianpoint("a"))', - [] - ); + testErrorsAndWarnings('from a_index | stats median(booleanField)', [ + 'Argument of [median] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | stats var = median(*)', [ + 'Using wildcards (*) in median is not allowed', + ]); + + testErrorsAndWarnings('from a_index | stats var = median(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats median(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(counterIntegerField))', []); + testErrorsAndWarnings('from a_index | stats round(median(counterIntegerField))', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(median(counterIntegerField)) + median(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median(counterIntegerField)) + median(counterIntegerField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(counterIntegerField)', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats median(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats var0 = median(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoPointField, geoPointField)', + 'from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(stringField, stringField)', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings( - 'from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | stats var = median(doubleField)', []); + testErrorsAndWarnings('from a_index | stats median(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(median(doubleField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoPointField, geoShapeField)', + 'from a_index | stats var = round(median(doubleField)) + median(doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats round(median(doubleField)) + median(doubleField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(doubleField)', []); 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)', + 'from a_index | stats avg(doubleField), var0 = median(doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoPointField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats median(doubleField) by round(doubleField / 2)', [] ); 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)', + 'from a_index | stats var0 = median(doubleField) by var1 = round(doubleField / 2)', [] ); - 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.'] + 'from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | stats var = median(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats median(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(unsignedLongField))', []); + testErrorsAndWarnings('from a_index | stats round(median(unsignedLongField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)', + 'from a_index | stats var = round(median(unsignedLongField)) + median(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)', + 'from a_index | stats round(median(unsignedLongField)) + median(unsignedLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(unsignedLongField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats avg(doubleField), median(unsignedLongField)', [] ); 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)', + 'from a_index | stats avg(doubleField), var0 = median(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)', + 'from a_index | stats median(unsignedLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var0 = median(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort st_disjoint(geoPointField, geoPointField)', []); + testErrorsAndWarnings('from a_index | stats var = median(longField)', []); + testErrorsAndWarnings('from a_index | stats median(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(longField))', []); + testErrorsAndWarnings('from a_index | stats round(median(longField))', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(median(longField)) + median(longField)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(median(longField)) + median(longField)', [] ); - + testErrorsAndWarnings('from a_index | stats var0 = median(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(longField)', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median(longField)', [] ); - testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats median(longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats var0 = median(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_disjoint(true, true)', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(booleanField, booleanField)', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats var = median(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats median(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(counterLongField))', []); + testErrorsAndWarnings('from a_index | stats round(median(counterLongField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats var = round(median(counterLongField)) + median(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(median(counterLongField)) + median(counterLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(counterLongField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), median(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats avg(doubleField), var0 = median(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats median(counterLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats var0 = median(counterLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_disjoint(nullVar, nullVar)', []); - }); - describe('st_intersects', () => { testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_intersects(to_geopoint("a"), to_geopoint("a"))', []); - - testErrorsAndWarnings('row var = st_intersects("a", "a")', [ - 'Argument of [st_intersects] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_intersects] must be [cartesian_point], found value ["a"] type [string]', - ]); + testErrorsAndWarnings('from a_index | stats var = median(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats median(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(counterDoubleField))', []); + testErrorsAndWarnings('from a_index | stats round(median(counterDoubleField))', []); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var = round(median(counterDoubleField)) + median(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats round(median(counterDoubleField)) + median(counterDoubleField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(counterDoubleField)', []); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats median(counterDoubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats var0 = median(counterDoubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("a"), to_cartesianpoint("a"))', - [] - ); + testErrorsAndWarnings('from a_index | sort median(integerField)', [ + 'SORT does not support function median', + ]); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(integerField)', [ + 'WHERE does not support function median', + ]); - testErrorsAndWarnings( - 'row st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(integerField) > 0', [ + 'WHERE does not support function median', + ]); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(counterIntegerField)', [ + 'WHERE does not support function median', + ]); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(counterIntegerField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(doubleField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(doubleField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(unsignedLongField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(unsignedLongField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(longField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(longField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterLongField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterLongField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterDoubleField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterDoubleField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(integerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(integerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(integerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(integerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterIntegerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterIntegerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterIntegerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterIntegerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(doubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(doubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(doubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(doubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(unsignedLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(unsignedLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(unsignedLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(unsignedLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(longField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(longField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(longField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(longField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterDoubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterDoubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterDoubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterDoubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | stats median(null)', []); + testErrorsAndWarnings('row nullVar = null | stats median(nullVar)', []); + }); + describe('median_absolute_deviation', () => { testErrorsAndWarnings( - 'row st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = median_absolute_deviation(integerField)', [] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(integerField)', []); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats var = round(median_absolute_deviation(integerField))', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(integerField))', [] ); testErrorsAndWarnings( - 'row st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoPointField, geoPointField)', + 'from a_index | stats round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoPointField)', + 'from a_index | stats median_absolute_deviation(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats var0 = median_absolute_deviation(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval st_intersects(stringField, stringField)', [ - 'Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]', - ]); - testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoPointField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoShapeField)', + 'from a_index | stats var0 = median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoShapeField, geoPointField)', + 'from a_index | stats median_absolute_deviation(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoPointField)', + 'from a_index | stats var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoShapeField, geoShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var = median_absolute_deviation(avg(integerField))', + [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); + + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(booleanField)', [ + 'Argument of [median_absolute_deviation] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | stats var = median_absolute_deviation(*)', [ + 'Using wildcards (*) in median_absolute_deviation is not allowed', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)', + 'from a_index | stats var = median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField)', + 'from a_index | stats median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats var = round(median_absolute_deviation(counterIntegerField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats round(median_absolute_deviation(counterIntegerField))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)', + 'from a_index | stats var = round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)', + 'from a_index | stats round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats var0 = median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)', + 'from a_index | stats median_absolute_deviation(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | sort st_intersects(geoPointField, geoPointField)', + 'from a_index | stats var = median_absolute_deviation(doubleField)', [] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(doubleField)', []); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(median_absolute_deviation(doubleField))', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(median_absolute_deviation(doubleField))', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats var0 = median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats median_absolute_deviation(doubleField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('row var = st_intersects(true, true)', [ - 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval st_intersects(booleanField, booleanField)', [ - 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats var = median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats var = round(median_absolute_deviation(unsignedLongField))', [] ); testErrorsAndWarnings( - 'from a_index | sort st_intersects(cartesianPointField, cartesianPointField)', + 'from a_index | stats round(median_absolute_deviation(unsignedLongField))', [] ); - testErrorsAndWarnings('from a_index | eval st_intersects(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_intersects(nullVar, nullVar)', []); - }); - describe('st_within', () => { testErrorsAndWarnings( - 'row var = st_within(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var = round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row st_within(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)', [] ); - testErrorsAndWarnings('row var = st_within(to_geopoint("a"), to_geopoint("a"))', []); - - testErrorsAndWarnings('row var = st_within("a", "a")', [ - 'Argument of [st_within] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_within] must be [cartesian_point], found value ["a"] type [string]', - ]); - testErrorsAndWarnings( - 'row var = st_within(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row st_within(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats median_absolute_deviation(unsignedLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_within(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = median_absolute_deviation(longField)', [] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(longField)', []); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("a"), to_cartesianpoint("a"))', + 'from a_index | stats var = round(median_absolute_deviation(longField))', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(longField))', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats median_absolute_deviation(longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoPointField, geoPointField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_within(stringField, stringField)', [ - 'Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]', - ]); - testErrorsAndWarnings( - 'from a_index | eval st_within(geoPointField, geoPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoPointField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats var = median_absolute_deviation(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(geoPointField, geoShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats median_absolute_deviation(counterLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, geoPointField)', + 'from a_index | stats var = round(median_absolute_deviation(counterLongField))', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats round(median_absolute_deviation(counterLongField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(geoShapeField, geoPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var = round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, geoShapeField)', + 'from a_index | stats round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)', [] ); - 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.'] + 'from a_index | stats var0 = median_absolute_deviation(counterLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats median_absolute_deviation(counterLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)', + 'from a_index | stats var = median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianPointField)', + 'from a_index | stats median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var = round(median_absolute_deviation(counterDoubleField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats round(median_absolute_deviation(counterDoubleField))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats var = round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var0 = median_absolute_deviation(counterDoubleField)', + [] ); - testErrorsAndWarnings('from a_index | sort st_within(geoPointField, geoPointField)', []); - testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats median_absolute_deviation(counterDoubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_within(true, true)', [ - 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | sort median_absolute_deviation(integerField)', [ + 'SORT does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(integerField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(integerField) > 0', [ + 'WHERE does not support function median_absolute_deviation', ]); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(counterIntegerField)', + ['WHERE does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('from a_index | eval st_within(booleanField, booleanField)', [ - 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings( + 'from a_index | where median_absolute_deviation(counterIntegerField) > 0', + ['WHERE does not support function median_absolute_deviation'] + ); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(doubleField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(doubleField) > 0', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(unsignedLongField)', [ + 'WHERE does not support function median_absolute_deviation', ]); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(unsignedLongField) > 0', + ['WHERE does not support function median_absolute_deviation'] ); + testErrorsAndWarnings('from a_index | where median_absolute_deviation(longField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(longField) > 0', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(counterLongField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(counterLongField) > 0', + ['WHERE does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(counterDoubleField)', + ['WHERE does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | where median_absolute_deviation(counterDoubleField) > 0', + ['WHERE does not support function median_absolute_deviation'] ); + testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(integerField)', [ + 'EVAL does not support function median_absolute_deviation', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(integerField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(integerField)', [ + 'EVAL does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(integerField) > 0', [ + 'EVAL does not support function median_absolute_deviation', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(counterIntegerField)', + ['EVAL does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(counterIntegerField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | sort st_within(cartesianPointField, cartesianPointField)', - [] + 'from a_index | eval median_absolute_deviation(counterIntegerField)', + ['EVAL does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('from a_index | eval st_within(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_within(nullVar, nullVar)', []); - }); - 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( + 'from a_index | eval median_absolute_deviation(counterIntegerField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('row var = st_x("a")', [ - 'Argument of [st_x] must be [cartesian_point], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(doubleField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - 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 var = median_absolute_deviation(doubleField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_x(stringField)', [ - 'Argument of [st_x] must be [cartesian_point], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(doubleField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval st_x(geoPointField, extraArg)', [ - 'Error: [st_x] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(doubleField) > 0', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval var = st_x(*)', [ - 'Using wildcards (*) in st_x is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(unsignedLongField)', + ['EVAL does not support function median_absolute_deviation'] + ); - 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 var = median_absolute_deviation(unsignedLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField, extraArg)', [ - 'Error: [st_x] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(unsignedLongField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | sort st_x(geoPointField)', []); - testErrorsAndWarnings( - 'row var = st_x(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] + 'from a_index | eval median_absolute_deviation(unsignedLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('row var = st_x(to_geopoint(to_geopoint("POINT (30 10)")))', []); - - testErrorsAndWarnings('row var = st_x(true)', [ - 'Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(longField)', [ + 'EVAL does not support function median_absolute_deviation', ]); testErrorsAndWarnings( - 'from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(longField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('from a_index | eval st_x(booleanField)', [ - 'Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(longField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval var = st_x(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | sort st_x(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval st_x(null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_x(nullVar)', []); - }); - - 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 [cartesian_point], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(longField) > 0', [ + 'EVAL does not support function median_absolute_deviation', ]); - 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 var = median_absolute_deviation(counterLongField)', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_y(stringField)', [ - 'Argument of [st_y] must be [cartesian_point], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(counterLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_y(geoPointField, extraArg)', [ - 'Error: [st_y] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(counterLongField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval var = st_y(*)', [ - 'Using wildcards (*) in st_y is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval median_absolute_deviation(counterLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - 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 var = median_absolute_deviation(counterDoubleField)', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField, extraArg)', [ - 'Error: [st_y] function expects exactly one argument, got 2.', + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(counterDoubleField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); + + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(counterDoubleField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | sort st_y(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval median_absolute_deviation(counterDoubleField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); + + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(null)', []); + testErrorsAndWarnings('row nullVar = null | stats median_absolute_deviation(nullVar)', []); + }); + describe('max', () => { + testErrorsAndWarnings('from a_index | stats var = max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(max(doubleField))', []); testErrorsAndWarnings( - 'row var = st_y(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(max(doubleField)) + max(doubleField)', [] ); - testErrorsAndWarnings('row var = st_y(to_geopoint(to_geopoint("POINT (30 10)")))', []); - - testErrorsAndWarnings('row var = st_y(true)', [ - 'Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(max(doubleField)) + max(doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | stats max(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = max(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(doubleField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = max(doubleField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = max(doubleField)', []); + testErrorsAndWarnings( + 'from a_index | stats max(doubleField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval st_y(booleanField)', [ - 'Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = st_y(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | sort st_y(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval st_y(null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_y(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = max(doubleField) by var1 = round(doubleField / 2)', + [] + ); - 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( + 'from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), ipField', + [] + ); - 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 | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = starts_with(stringField, stringField)', + 'from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval starts_with(stringField, stringField)', []); testErrorsAndWarnings( - 'from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))', + 'from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - 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 | stats var = max(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ]); - testErrorsAndWarnings( - 'from a_index | eval starts_with(stringField, stringField, extraArg)', - ['Error: [starts_with] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | stats max(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings('from a_index | sort starts_with(stringField, stringField)', []); - testErrorsAndWarnings('row var = starts_with(to_string(true), to_string(true))', []); + testErrorsAndWarnings('from a_index | stats max(cartesianPointField)', [ + 'Argument of [max] must be [double], found value [cartesianPointField] type [cartesian_point]', + ]); - testErrorsAndWarnings('row var = starts_with(true, true)', [ - 'Argument of [starts_with] must be [string], found value [true] type [boolean]', - 'Argument of [starts_with] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | stats var = max(*)', [ + 'Using wildcards (*) in max is not allowed', ]); + testErrorsAndWarnings('from a_index | stats var = max(longField)', []); + testErrorsAndWarnings('from a_index | stats max(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(longField))', []); + testErrorsAndWarnings('from a_index | stats round(max(longField))', []); testErrorsAndWarnings( - 'from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))', + 'from a_index | stats var = round(max(longField)) + max(longField)', [] ); - - testErrorsAndWarnings('from a_index | eval starts_with(booleanField, booleanField)', [ - 'Argument of [starts_with] must be [string], found value [booleanField] type [boolean]', - 'Argument of [starts_with] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval starts_with(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval starts_with(nullVar, nullVar)', []); - }); - - describe('substring', () => { - testErrorsAndWarnings('row var = substring("a", 5, 5)', []); - testErrorsAndWarnings('row var = substring("a", 5)', []); - testErrorsAndWarnings('row substring("a", 5, 5)', []); - testErrorsAndWarnings('row substring("a", 5)', []); + testErrorsAndWarnings('from a_index | stats round(max(longField)) + max(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = max(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = max(longField)', []); + testErrorsAndWarnings('from a_index | stats max(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = substring(to_string("a"), to_integer("a"), to_integer("a"))', + 'from a_index | stats var0 = max(longField) by var1 = round(doubleField / 2)', [] ); - 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', + 'from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), ipField', [] ); 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]', - ] + 'from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = substring(stringField, numberField, numberField)', + 'from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval substring(stringField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = max(integerField)', []); + testErrorsAndWarnings('from a_index | stats max(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(max(integerField))', []); + testErrorsAndWarnings( - 'from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))', + 'from a_index | stats var = round(max(integerField)) + max(integerField)', [] ); 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]', - ] + 'from a_index | stats round(max(integerField)) + max(integerField)', + [] ); - + testErrorsAndWarnings('from a_index | stats var0 = max(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(integerField)', []); testErrorsAndWarnings( - 'from a_index | eval substring(stringField, numberField, numberField, extraArg)', - ['Error: [substring] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), var0 = max(integerField)', + [] ); - testErrorsAndWarnings( - 'from a_index | sort substring(stringField, numberField, numberField)', + 'from a_index | stats max(integerField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | sort substring(stringField, numberField)', []); testErrorsAndWarnings( - 'row var = substring(to_string(true), to_integer(true), to_integer(true))', + 'from a_index | stats var0 = max(integerField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('row var = substring(true, true, true)', [ - 'Argument of [substring] must be [string], found value [true] type [boolean]', - 'Argument of [substring] must be [number], found value [true] type [boolean]', - 'Argument of [substring] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | where length(substring(booleanField, booleanField, booleanField)) > 0', - [ - 'Argument of [substring] must be [string], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval substring(booleanField, booleanField, booleanField)', - [ - 'Argument of [substring] must be [string], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | eval substring(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval substring(nullVar, nullVar, nullVar)', []); - }); - describe('tan', () => { - testErrorsAndWarnings('row var = tan(5)', []); - testErrorsAndWarnings('row tan(5)', []); - testErrorsAndWarnings('row var = tan(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | stats var = max(dateField)', []); + testErrorsAndWarnings('from a_index | stats max(dateField)', []); + testErrorsAndWarnings('from a_index | stats var = max(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats max(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats var = max(booleanField)', []); + testErrorsAndWarnings('from a_index | stats max(booleanField)', []); + testErrorsAndWarnings('from a_index | stats var = max(ipField)', []); + testErrorsAndWarnings('from a_index | stats max(ipField)', []); - testErrorsAndWarnings('row var = tan("a")', [ - 'Argument of [tan] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | sort max(doubleField)', [ + 'SORT does not support function max', ]); - testErrorsAndWarnings('from a_index | where tan(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where max(doubleField)', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('from a_index | where tan(stringField) > 0', [ - 'Argument of [tan] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where max(doubleField) > 0', [ + 'WHERE does not support function max', ]); - 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 | where max(longField)', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tan(stringField)', [ - 'Argument of [tan] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where max(longField) > 0', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tan(numberField, extraArg)', [ - 'Error: [tan] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where max(integerField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tan(*)', [ - 'Using wildcards (*) in tan is not allowed', + testErrorsAndWarnings('from a_index | where max(integerField) > 0', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | sort tan(numberField)', []); - testErrorsAndWarnings('row var = tan(to_integer(true))', []); + testErrorsAndWarnings('from a_index | where max(dateField)', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('row var = tan(true)', [ - 'Argument of [tan] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where max(dateField) > 0', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | where tan(booleanField) > 0', [ - 'Argument of [tan] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where max(datePeriodField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tan(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where max(datePeriodField) > 0', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tan(booleanField)', [ - 'Argument of [tan] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where max(booleanField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tan(null)', []); - testErrorsAndWarnings('row nullVar = null | eval tan(nullVar)', []); - }); - describe('tanh', () => { - testErrorsAndWarnings('row var = tanh(5)', []); - testErrorsAndWarnings('row tanh(5)', []); - testErrorsAndWarnings('row var = tanh(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | where max(booleanField) > 0', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('row var = tanh("a")', [ - 'Argument of [tanh] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | where max(ipField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | where tanh(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where max(ipField) > 0', [ + 'WHERE does not support function max', + ]); - 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 = max(doubleField)', [ + 'EVAL does not support function max', ]); - 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 var = max(doubleField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tanh(stringField)', [ - 'Argument of [tanh] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval max(doubleField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tanh(numberField, extraArg)', [ - 'Error: [tanh] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval max(doubleField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tanh(*)', [ - 'Using wildcards (*) in tanh is not allowed', + testErrorsAndWarnings('from a_index | eval var = max(longField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort tanh(numberField)', []); - testErrorsAndWarnings('row var = tanh(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval var = max(longField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('row var = tanh(true)', [ - 'Argument of [tanh] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval max(longField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | where tanh(booleanField) > 0', [ - 'Argument of [tanh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval max(longField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tanh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = max(integerField)', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tanh(booleanField)', [ - 'Argument of [tanh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = max(integerField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tanh(null)', []); - testErrorsAndWarnings('row nullVar = null | eval tanh(nullVar)', []); - }); - 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 max(integerField)', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tau(extraArg)', [ - 'Error: [tau] function expects exactly 0 arguments, got 1.', + testErrorsAndWarnings('from a_index | eval max(integerField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort tau()', []); - testErrorsAndWarnings('row nullVar = null | eval tau()', []); - }); + testErrorsAndWarnings('from a_index | eval var = max(dateField)', [ + 'EVAL does not support function max', + ]); - 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 = max(dateField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval var = to_boolean(*)', [ - 'Using wildcards (*) in to_boolean is not allowed', + testErrorsAndWarnings('from a_index | eval max(dateField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort to_boolean(stringField)', []); - testErrorsAndWarnings('row var = to_boolean(true)', []); - testErrorsAndWarnings('row to_boolean(true)', []); - testErrorsAndWarnings('row var = to_bool(true)', []); - testErrorsAndWarnings('row var = to_boolean(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_boolean(5)', []); - testErrorsAndWarnings('row to_boolean(5)', []); - testErrorsAndWarnings('row var = to_bool(5)', []); - testErrorsAndWarnings('row var = to_boolean(to_integer(true))', []); - testErrorsAndWarnings('row var = to_boolean(to_string(true))', []); + testErrorsAndWarnings('from a_index | eval max(dateField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('row var = to_boolean(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = max(datePeriodField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = to_boolean(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_boolean(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_bool(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_boolean(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = max(datePeriodField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval to_boolean(cartesianPointField)', [ - 'Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval max(datePeriodField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = to_boolean(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_boolean(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_bool(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_boolean(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_boolean(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval max(datePeriodField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval to_boolean(booleanField, extraArg)', [ - 'Error: [to_boolean] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = max(booleanField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort to_boolean(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_boolean(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_boolean(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = max(booleanField) > 0', [ + 'EVAL does not support function max', + ]); - 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 max(booleanField)', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(*)', [ - 'Using wildcards (*) in to_cartesianpoint is not allowed', + testErrorsAndWarnings('from a_index | eval max(booleanField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(ipField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(ipField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(ipField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(ipField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | stats max(null)', []); + testErrorsAndWarnings('row nullVar = null | stats max(nullVar)', []); + testErrorsAndWarnings('from a_index | stats max("2022")', []); + testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', [ + 'Argument of [max] must be [double], found value [concat("20","22")] type [keyword]', ]); + }); + + describe('min', () => { + testErrorsAndWarnings('from a_index | stats var = min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(min(doubleField))', []); - testErrorsAndWarnings('from a_index | sort to_cartesianpoint(stringField)', []); testErrorsAndWarnings( - 'row var = to_cartesianpoint(to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = round(min(doubleField)) + min(doubleField)', [] ); - testErrorsAndWarnings('row to_cartesianpoint(to_cartesianpoint("POINT (30 10)"))', []); testErrorsAndWarnings( - 'row var = to_cartesianpoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(min(doubleField)) + min(doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | stats min(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = min(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(doubleField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(doubleField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = min(doubleField)', []); + testErrorsAndWarnings( + 'from a_index | stats min(doubleField) by round(doubleField / 2)', [] ); - - testErrorsAndWarnings('row var = to_cartesianpoint(to_string(true))', []); - - testErrorsAndWarnings('row var = to_cartesianpoint(true)', [ - 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]', - ]); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianpoint(cartesianPointField)', + 'from a_index | stats var0 = min(doubleField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianpoint(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianpoint(booleanField)', [ - 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianpoint(to_string(booleanField))', + 'from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)', - ['Error: [to_cartesianpoint] function expects exactly one argument, got 2.'] + 'from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort to_cartesianpoint(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_cartesianpoint(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_cartesianpoint(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | stats var = min(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - 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 | stats min(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(*)', [ - 'Using wildcards (*) in to_cartesianshape is not allowed', + testErrorsAndWarnings('from a_index | stats min(cartesianPointField)', [ + 'Argument of [min] must be [double], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | stats var = min(*)', [ + 'Using wildcards (*) in min is not allowed', ]); - testErrorsAndWarnings('from a_index | sort to_cartesianshape(stringField)', []); + testErrorsAndWarnings('from a_index | stats var = min(longField)', []); + testErrorsAndWarnings('from a_index | stats min(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(longField))', []); + testErrorsAndWarnings('from a_index | stats round(min(longField))', []); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = round(min(longField)) + min(longField)', [] ); - testErrorsAndWarnings('row to_cartesianshape(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | stats round(min(longField)) + min(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = min(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = min(longField)', []); + testErrorsAndWarnings('from a_index | stats min(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var0 = min(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('row to_cartesianshape(to_cartesianshape("POINT (30 10)"))', []); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('row var = to_cartesianshape(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('row var = to_cartesianshape(true)', [ - 'Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = min(integerField)', []); + testErrorsAndWarnings('from a_index | stats min(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(min(integerField))', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(cartesianPointField)', + 'from a_index | stats var = round(min(integerField)) + min(integerField)', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(min(integerField)) + min(integerField)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = min(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(integerField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(integerField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | stats min(integerField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(booleanField)', [ - 'Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = min(integerField) by var1 = round(doubleField / 2)', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(cartesianShapeField)', + 'from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(to_string(booleanField))', + 'from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval to_cartesianshape(cartesianPointField, extraArg)', - ['Error: [to_cartesianshape] function expects exactly one argument, got 2.'] + 'from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort to_cartesianshape(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_cartesianshape(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | stats var = min(dateField)', []); + testErrorsAndWarnings('from a_index | stats min(dateField)', []); + testErrorsAndWarnings('from a_index | stats var = min(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats min(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats var = min(booleanField)', []); + testErrorsAndWarnings('from a_index | stats min(booleanField)', []); + testErrorsAndWarnings('from a_index | stats var = min(ipField)', []); + testErrorsAndWarnings('from a_index | stats min(ipField)', []); - 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 | sort min(doubleField)', [ + 'SORT does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval var = to_datetime(*)', [ - 'Using wildcards (*) in to_datetime is not allowed', + testErrorsAndWarnings('from a_index | where min(doubleField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_datetime(stringField)', []); - testErrorsAndWarnings('row var = to_datetime(now())', []); - testErrorsAndWarnings('row to_datetime(now())', []); - testErrorsAndWarnings('row var = to_dt(now())', []); - testErrorsAndWarnings('row var = to_datetime(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_datetime(5)', []); - testErrorsAndWarnings('row to_datetime(5)', []); - testErrorsAndWarnings('row var = to_dt(5)', []); - testErrorsAndWarnings('row var = to_datetime(to_integer(true))', []); - testErrorsAndWarnings('row var = to_datetime(to_string(true))', []); + testErrorsAndWarnings('from a_index | where min(doubleField) > 0', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('row var = to_datetime(true)', [ - 'Argument of [to_datetime] must be [date], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where min(longField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_datetime(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_datetime(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dt(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_datetime(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | where min(longField) > 0', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_datetime(booleanField)', [ - 'Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where min(integerField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_datetime(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_datetime(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dt(numberField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = to_datetime(to_integer(booleanField))', - [] - ); - testErrorsAndWarnings('from a_index | eval var = to_datetime(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | where min(integerField) > 0', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_datetime(dateField, extraArg)', [ - 'Error: [to_datetime] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where min(dateField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_datetime(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_datetime(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_datetime(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | where min(dateField) > 0', [ + 'WHERE does not support function min', + ]); - describe('to_degrees', () => { - testErrorsAndWarnings('row var = to_degrees(5)', []); - testErrorsAndWarnings('row to_degrees(5)', []); - testErrorsAndWarnings('row var = to_degrees(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | where min(datePeriodField)', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('row var = to_degrees("a")', [ - 'Argument of [to_degrees] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | where min(datePeriodField) > 0', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_degrees(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where min(booleanField)', [ + 'WHERE does not support function min', + ]); - 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 | where min(booleanField) > 0', [ + 'WHERE does not support function min', ]); - 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 | where min(ipField)', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_degrees(stringField)', [ - 'Argument of [to_degrees] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where min(ipField) > 0', [ + 'WHERE does not support function min', ]); - 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 = min(doubleField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_degrees(*)', [ - 'Using wildcards (*) in to_degrees is not allowed', + testErrorsAndWarnings('from a_index | eval var = min(doubleField) > 0', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_degrees(numberField)', []); - testErrorsAndWarnings('row var = to_degrees(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval min(doubleField)', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('row var = to_degrees(true)', [ - 'Argument of [to_degrees] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval min(doubleField) > 0', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_degrees(booleanField) > 0', [ - 'Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = min(longField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_degrees(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = min(longField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_degrees(booleanField)', [ - 'Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval min(longField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval to_degrees(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_degrees(nullVar)', []); - }); - 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 min(longField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval var = to_double(*)', [ - 'Using wildcards (*) in to_double is not allowed', + testErrorsAndWarnings('from a_index | eval var = min(integerField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_double(stringField)', []); - testErrorsAndWarnings('row var = to_double(true)', []); - testErrorsAndWarnings('row to_double(true)', []); - testErrorsAndWarnings('row var = to_dbl(true)', []); - testErrorsAndWarnings('row var = to_double(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_double(5)', []); - testErrorsAndWarnings('row to_double(5)', []); - testErrorsAndWarnings('row var = to_dbl(5)', []); - testErrorsAndWarnings('row var = to_double(to_integer(true))', []); - testErrorsAndWarnings('row var = to_double(now())', []); - testErrorsAndWarnings('row to_double(now())', []); - testErrorsAndWarnings('row var = to_dbl(now())', []); - testErrorsAndWarnings('row var = to_double(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_double(to_string(true))', []); + testErrorsAndWarnings('from a_index | eval var = min(integerField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('row var = to_double(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_double] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval min(integerField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_double(booleanField) > 0', []); + testErrorsAndWarnings('from a_index | eval min(integerField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | where to_double(cartesianPointField) > 0', [ - 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = min(dateField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_double(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_double(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_double(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_double(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_double(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dbl(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = min(dateField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_double(cartesianPointField)', [ - 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval min(dateField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_double(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_double(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dbl(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_double(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_double(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dbl(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval min(dateField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(datePeriodField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(datePeriodField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(datePeriodField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(datePeriodField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(booleanField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(booleanField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(booleanField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(booleanField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(ipField)', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_double(booleanField, extraArg)', [ - 'Error: [to_double] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = min(ipField) > 0', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_double(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_double(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_double(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval min(ipField)', [ + 'EVAL does not support function min', + ]); - 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 min(ipField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval var = to_geopoint(*)', [ - 'Using wildcards (*) in to_geopoint is not allowed', + testErrorsAndWarnings('from a_index | stats min(null)', []); + testErrorsAndWarnings('row nullVar = null | stats min(nullVar)', []); + testErrorsAndWarnings('from a_index | stats min("2022")', []); + testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', [ + 'Argument of [min] must be [double], found value [concat("20","22")] type [keyword]', ]); + }); + + describe('count', () => { + testErrorsAndWarnings('from a_index | stats var = count(textField)', []); + testErrorsAndWarnings('from a_index | stats count(textField)', []); + testErrorsAndWarnings('from a_index | stats var = round(count(textField))', []); + testErrorsAndWarnings('from a_index | stats round(count(textField))', []); - testErrorsAndWarnings('from a_index | sort to_geopoint(stringField)', []); - testErrorsAndWarnings('row var = to_geopoint(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_geopoint(to_geopoint("POINT (30 10)"))', []); testErrorsAndWarnings( - 'row var = to_geopoint(to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats var = round(count(textField)) + count(textField)', [] ); - testErrorsAndWarnings('row var = to_geopoint(to_string(true))', []); - - testErrorsAndWarnings('row var = to_geopoint(true)', [ - 'Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval var = to_geopoint(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_geopoint(to_geopoint(geoPointField))', + 'from a_index | stats round(count(textField)) + count(textField)', [] ); - testErrorsAndWarnings('from a_index | eval to_geopoint(booleanField)', [ - 'Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | sort count(textField)', [ + 'SORT does not support function count', ]); - testErrorsAndWarnings('from a_index | eval var = to_geopoint(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | where count(textField)', [ + 'WHERE does not support function count', + ]); - testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField, extraArg)', [ - 'Error: [to_geopoint] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where count(textField) > 0', [ + 'WHERE does not support function count', ]); - testErrorsAndWarnings('from a_index | sort to_geopoint(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geopoint(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_geopoint(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = count(textField)', [ + 'EVAL does not support function count', + ]); - 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 = count(textField) > 0', [ + 'EVAL does not support function count', + ]); - testErrorsAndWarnings('from a_index | eval var = to_geoshape(*)', [ - 'Using wildcards (*) in to_geoshape is not allowed', + testErrorsAndWarnings('from a_index | eval count(textField)', [ + 'EVAL does not support function count', ]); - testErrorsAndWarnings('from a_index | sort to_geoshape(stringField)', []); - testErrorsAndWarnings('row var = to_geoshape(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_geoshape(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings( - 'row var = to_geoshape(to_geopoint(to_geopoint("POINT (30 10)")))', - [] - ); - testErrorsAndWarnings('row var = to_geoshape(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval count(textField) > 0', [ + 'EVAL does not support function count', + ]); + + testErrorsAndWarnings('from a_index | stats count(null)', []); + testErrorsAndWarnings('row nullVar = null | stats count(nullVar)', []); + }); + + describe('count_distinct', () => { testErrorsAndWarnings( - 'row var = to_geoshape(to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats count_distinct(null, null, null, null, null, null, null, null)', [] ); - testErrorsAndWarnings('row var = to_geoshape(to_string(true))', []); - - testErrorsAndWarnings('row var = to_geoshape(true)', [ - 'Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_geoshape(to_geopoint(geoPointField))', + 'row nullVar = null | stats count_distinct(nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar)', [] ); + }); - testErrorsAndWarnings('from a_index | eval to_geoshape(booleanField)', [ - 'Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(geoShapeField)', []); + describe('st_centroid_agg', () => { testErrorsAndWarnings( - 'from a_index | eval var = to_geoshape(to_geoshape(geoPointField))', + 'from a_index | stats var = st_centroid_agg(cartesianPointField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_geoshape(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField, extraArg)', [ - 'Error: [to_geoshape] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ]); - testErrorsAndWarnings('from a_index | sort to_geoshape(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_geoshape(nullVar)', []); - }); - - 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 | stats st_centroid_agg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ]); - testErrorsAndWarnings('from a_index | sort to_integer(stringField)', []); - testErrorsAndWarnings('row var = to_integer(true)', []); - testErrorsAndWarnings('row to_integer(true)', []); - testErrorsAndWarnings('row var = to_int(true)', []); - testErrorsAndWarnings('row var = to_integer(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_integer(5)', []); - testErrorsAndWarnings('row to_integer(5)', []); - testErrorsAndWarnings('row var = to_int(5)', []); - testErrorsAndWarnings('row var = to_integer(to_integer(true))', []); - testErrorsAndWarnings('row var = to_integer(now())', []); - testErrorsAndWarnings('row to_integer(now())', []); - testErrorsAndWarnings('row var = to_int(now())', []); - testErrorsAndWarnings('row var = to_integer(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_integer(to_string(true))', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(booleanField)', [ + 'Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings('row var = to_integer(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_integer] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(*)', [ + 'Using wildcards (*) in st_centroid_agg is not allowed', ]); - testErrorsAndWarnings('from a_index | where to_integer(booleanField) > 0', []); + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(geoPointField)', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(geoPointField)', []); - testErrorsAndWarnings('from a_index | where to_integer(cartesianPointField) > 0', [ - 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | sort st_centroid_agg(cartesianPointField)', [ + 'SORT does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | where to_integer(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_integer(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_integer(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_int(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField)', [ + 'WHERE does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_integer(cartesianPointField)', [ - 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField) > 0', [ + 'WHERE does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | eval var = to_integer(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_int(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_int(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField)', [ + 'WHERE does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_integer(booleanField, extraArg)', [ - 'Error: [to_integer] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField) > 0', [ + 'WHERE does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | sort to_integer(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_integer(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(cartesianPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); - 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 = st_centroid_agg(cartesianPointField) > 0', + ['EVAL does not support function st_centroid_agg'] + ); - testErrorsAndWarnings('from a_index | eval var = to_ip(*)', [ - 'Using wildcards (*) in to_ip is not allowed', + testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField)', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | sort to_ip(stringField)', []); - testErrorsAndWarnings('row var = to_ip(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row to_ip(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = to_ip(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = to_ip(to_string(true))', []); - - testErrorsAndWarnings('row var = to_ip(true)', [ - 'Argument of [to_ip] must be [ip], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | eval var = to_ip(ipField)', []); - testErrorsAndWarnings('from a_index | eval to_ip(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ip(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_ip(booleanField)', [ - 'Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | eval var = to_ip(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_ip(ipField, extraArg)', [ - 'Error: [to_ip] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | sort to_ip(ipField)', []); - testErrorsAndWarnings('from a_index | eval to_ip(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_ip(nullVar)', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(null)', []); + testErrorsAndWarnings('row nullVar = null | stats st_centroid_agg(nullVar)', []); }); - 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)', []); + describe('values', () => { + testErrorsAndWarnings('from a_index | stats var = values(textField)', []); + testErrorsAndWarnings('from a_index | stats values(textField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(*)', [ - 'Using wildcards (*) in to_long is not allowed', + testErrorsAndWarnings('from a_index | sort values(textField)', [ + 'SORT does not support function values', ]); - testErrorsAndWarnings('from a_index | sort to_long(stringField)', []); - testErrorsAndWarnings('row var = to_long(true)', []); - testErrorsAndWarnings('row to_long(true)', []); - testErrorsAndWarnings('row var = to_long(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_long(5)', []); - testErrorsAndWarnings('row to_long(5)', []); - testErrorsAndWarnings('row var = to_long(to_integer(true))', []); - testErrorsAndWarnings('row var = to_long(now())', []); - testErrorsAndWarnings('row to_long(now())', []); - testErrorsAndWarnings('row var = to_long(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_long(to_string(true))', []); - - testErrorsAndWarnings('row var = to_long(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where values(textField)', [ + 'WHERE does not support function values', ]); - testErrorsAndWarnings('from a_index | where to_long(booleanField) > 0', []); - - testErrorsAndWarnings('from a_index | where to_long(cartesianPointField) > 0', [ - 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where values(textField) > 0', [ + 'WHERE does not support function values', ]); - testErrorsAndWarnings('from a_index | where to_long(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_long(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_long(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = values(textField)', [ + 'EVAL does not support function values', + ]); - testErrorsAndWarnings('from a_index | eval to_long(cartesianPointField)', [ - 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = values(textField) > 0', [ + 'EVAL does not support function values', ]); - testErrorsAndWarnings('from a_index | eval var = to_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval values(textField)', [ + 'EVAL does not support function values', + ]); - testErrorsAndWarnings('from a_index | eval to_long(booleanField, extraArg)', [ - 'Error: [to_long] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval values(textField) > 0', [ + 'EVAL does not support function values', ]); - testErrorsAndWarnings('from a_index | sort to_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_long(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_long(nullVar)', []); + testErrorsAndWarnings('from a_index | stats values(null)', []); + testErrorsAndWarnings('row nullVar = null | stats values(nullVar)', []); }); - describe('to_lower', () => { - testErrorsAndWarnings('row var = to_lower("a")', []); - testErrorsAndWarnings('row to_lower("a")', []); - testErrorsAndWarnings('row var = to_lower(to_string("a"))', []); + describe('top', () => { + testErrorsAndWarnings( + 'from a_index | stats var = top(textField, integerField, textField)', + ['Argument of [=] must be a constant, received [top(textField,integerField,textField)]'] + ); - testErrorsAndWarnings('row var = to_lower(5)', [ - 'Argument of [to_lower] must be [string], found value [5] type [number]', + testErrorsAndWarnings('from a_index | stats top(textField, integerField, textField)', [ + 'Argument of [top] must be a constant, received [integerField]', + 'Argument of [top] must be a constant, received [textField]', ]); - 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 | sort top(textField, integerField, textField)', [ + 'SORT does not support function top', ]); - 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 | where top(textField, integerField, textField)', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | eval to_lower(stringField, extraArg)', [ - 'Error: [to_lower] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where top(textField, integerField, textField) > 0', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_lower(*)', [ - 'Using wildcards (*) in to_lower is not allowed', + testErrorsAndWarnings('from a_index | eval var = top(textField, integerField, textField)', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | sort to_lower(stringField)', []); - testErrorsAndWarnings('row var = to_lower(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | eval var = top(textField, integerField, textField) > 0', + ['EVAL does not support function top'] + ); - testErrorsAndWarnings('row var = to_lower(true)', [ - 'Argument of [to_lower] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval top(textField, integerField, textField)', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | where length(to_lower(booleanField)) > 0', [ - 'Argument of [to_lower] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval top(textField, integerField, textField) > 0', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_lower(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_lower(booleanField)', [ - 'Argument of [to_lower] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats top(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | stats top(nullVar, nullVar, nullVar)', [ + 'Argument of [top] must be a constant, received [nullVar]', + 'Argument of [top] must be a constant, received [nullVar]', ]); - testErrorsAndWarnings('from a_index | eval to_lower(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_lower(nullVar)', []); - }); - - 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 | stats var = top(textField, integerField, "asc")', [ + 'Argument of [=] must be a constant, received [top(textField,integerField,"asc")]', ]); - 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 | stats top(textField, integerField, "asc")', [ + 'Argument of [top] must be a constant, received [integerField]', ]); - 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 | sort top(textField, integerField, "asc")', [ + 'SORT does not support function top', ]); - testErrorsAndWarnings('from a_index | eval to_radians(numberField, extraArg)', [ - 'Error: [to_radians] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where top(textField, integerField, "asc")', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_radians(*)', [ - 'Using wildcards (*) in to_radians is not allowed', + testErrorsAndWarnings('from a_index | where top(textField, integerField, "asc") > 0', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | sort to_radians(numberField)', []); - testErrorsAndWarnings('row var = to_radians(to_integer(true))', []); - - testErrorsAndWarnings('row var = to_radians(true)', [ - 'Argument of [to_radians] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = top(textField, integerField, "asc")', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | where to_radians(booleanField) > 0', [ - 'Argument of [to_radians] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = top(textField, integerField, "asc") > 0', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_radians(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_radians(booleanField)', [ - 'Argument of [to_radians] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval top(textField, integerField, "asc")', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | eval to_radians(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_radians(nullVar)', []); - }); - - 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 | eval top(textField, integerField, "asc") > 0', [ + 'EVAL does not support function top', ]); + }); - testErrorsAndWarnings('from a_index | sort to_string(stringField)', []); - testErrorsAndWarnings('row var = to_string(true)', []); - testErrorsAndWarnings('row to_string(true)', []); - testErrorsAndWarnings('row var = to_str(true)', []); - testErrorsAndWarnings('row var = to_string(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_string(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_cartesianpoint("POINT (30 10)"))', []); - + describe('weighted_avg', () => { testErrorsAndWarnings( - 'row var = to_string(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = weighted_avg(doubleField, doubleField)', [] ); - - testErrorsAndWarnings('row var = to_string(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | stats weighted_avg(doubleField, doubleField)', []); testErrorsAndWarnings( - 'row var = to_string(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(weighted_avg(doubleField, doubleField))', [] ); - testErrorsAndWarnings('row var = to_string(now())', []); - testErrorsAndWarnings('row to_string(now())', []); - testErrorsAndWarnings('row var = to_str(now())', []); - testErrorsAndWarnings('row var = to_string(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_string(5)', []); - testErrorsAndWarnings('row to_string(5)', []); - testErrorsAndWarnings('row var = to_str(5)', []); - testErrorsAndWarnings('row var = to_string(to_integer(true))', []); - testErrorsAndWarnings('row var = to_string(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_string(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = to_string(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_string(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = to_string(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row to_string(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = to_str(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = to_string(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = to_string(to_string(true))', []); - testErrorsAndWarnings('row var = to_string(to_version("1.0.0"))', []); - testErrorsAndWarnings('row to_string(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = to_str(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = to_string(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where length(to_string(booleanField)) > 0', []); testErrorsAndWarnings( - 'from a_index | where length(to_string(cartesianPointField)) > 0', + 'from a_index | stats round(weighted_avg(doubleField, doubleField))', [] ); + testErrorsAndWarnings( - 'from a_index | where length(to_string(cartesianShapeField)) > 0', + 'from a_index | stats var = round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | where length(to_string(dateField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(numberField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(geoPointField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(geoShapeField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(ipField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(stringField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(versionField)) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_string(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_string(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_string(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval to_string(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(cartesianShapeField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))', + 'from a_index | stats weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_string(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_string(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_string(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_geopoint(geoPointField))', + 'from a_index | stats var0 = weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval to_string(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(geoShapeField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(ipField)', []); - testErrorsAndWarnings('from a_index | eval to_string(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(versionField)', []); - testErrorsAndWarnings('from a_index | eval to_string(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_version(stringField))', []); - - testErrorsAndWarnings('from a_index | eval to_string(booleanField, extraArg)', [ - 'Error: [to_string] function expects exactly one argument, got 2.', - ]); - testErrorsAndWarnings('from a_index | sort to_string(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_string(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_string(nullVar)', []); - }); - - 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)', []); - testErrorsAndWarnings('row var = to_unsigned_long(true)', []); - testErrorsAndWarnings('row to_unsigned_long(true)', []); - testErrorsAndWarnings('row var = to_ul(true)', []); - testErrorsAndWarnings('row var = to_ulong(true)', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_unsigned_long(now())', []); - testErrorsAndWarnings('row to_unsigned_long(now())', []); - testErrorsAndWarnings('row var = to_ul(now())', []); - testErrorsAndWarnings('row var = to_ulong(now())', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_unsigned_long(5)', []); - testErrorsAndWarnings('row to_unsigned_long(5)', []); - testErrorsAndWarnings('row var = to_ul(5)', []); - testErrorsAndWarnings('row var = to_ulong(5)', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_integer(true))', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_string(true))', []); - - testErrorsAndWarnings('row var = to_unsigned_long(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', - ]); - - testErrorsAndWarnings('from a_index | where to_unsigned_long(booleanField) > 0', []); - - testErrorsAndWarnings('from a_index | where to_unsigned_long(cartesianPointField) > 0', [ - 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings('from a_index | where to_unsigned_long(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_unsigned_long(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_unsigned_long(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ul(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ulong(booleanField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_boolean(booleanField))', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(cartesianPointField)', [ - 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ul(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ulong(dateField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_datetime(dateField))', + 'from a_index | stats var0 = weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ul(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ulong(numberField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_integer(booleanField))', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField)', [] ); + testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_string(booleanField))', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField, extraArg)', [ - 'Error: [to_unsigned_long] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | sort to_unsigned_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_unsigned_long(nullVar)', []); - }); - - 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)', []); - testErrorsAndWarnings('row var = to_upper(to_string(true))', []); - - testErrorsAndWarnings('row var = to_upper(true)', [ - 'Argument of [to_upper] must be [string], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where length(to_upper(booleanField)) > 0', [ - 'Argument of [to_upper] must be [string], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_upper(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_upper(booleanField)', [ - 'Argument of [to_upper] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval to_upper(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_upper(nullVar)', []); - }); - - 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)', []); - testErrorsAndWarnings('row var = to_version(to_version("1.0.0"))', []); - testErrorsAndWarnings('row to_version(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = to_ver(to_version("1.0.0"))', []); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(doubleField, doubleField) by round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('row var = to_version(true)', [ - 'Argument of [to_version] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = to_version(versionField)', []); - testErrorsAndWarnings('from a_index | eval to_version(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ver(versionField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval to_version(stringField, extraArg)', [ - 'Error: [to_version] function expects exactly one argument, got 2.', - ]); - testErrorsAndWarnings('from a_index | eval to_version(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_version(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); - describe('trim', () => { - testErrorsAndWarnings('row var = trim("a")', []); - testErrorsAndWarnings('row trim("a")', []); - testErrorsAndWarnings('row var = trim(to_string("a"))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('row var = trim(5)', [ - 'Argument of [trim] must be [string], found value [5] type [number]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(avg(integerField), avg(integerField))', + [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ] + ); - testErrorsAndWarnings('from a_index | where length(trim(stringField)) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(avg(integerField), avg(integerField))', + [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ] + ); - testErrorsAndWarnings('from a_index | where length(trim(numberField)) > 0', [ - 'Argument of [trim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | stats weighted_avg(booleanField, booleanField)', [ + 'Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]', + 'Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]', ]); - 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 | sort weighted_avg(doubleField, doubleField)', [ + 'SORT does not support function weighted_avg', + ]); - testErrorsAndWarnings('from a_index | eval trim(numberField)', [ - 'Argument of [trim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, doubleField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval trim(stringField, extraArg)', [ - 'Error: [trim] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, doubleField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = trim(*)', [ - 'Using wildcards (*) in trim is not allowed', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(doubleField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | sort trim(stringField)', []); - testErrorsAndWarnings('row var = trim(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(doubleField, doubleField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('row var = trim(true)', [ - 'Argument of [trim] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where length(trim(booleanField)) > 0', [ - 'Argument of [trim] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, doubleField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = trim(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | stats weighted_avg(null, null)', []); + testErrorsAndWarnings('row nullVar = null | stats weighted_avg(nullVar, nullVar)', []); + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(doubleField, longField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(doubleField, longField)', []); - testErrorsAndWarnings('from a_index | eval trim(booleanField)', [ - 'Argument of [trim] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval trim(null)', []); - testErrorsAndWarnings('row nullVar = null | eval trim(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(doubleField, longField))', + [] + ); - 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 round(weighted_avg(doubleField, longField))', + [] + ); testErrorsAndWarnings( - 'from a_index | stats var = round(avg(numberField)) + avg(numberField)', + 'from a_index | stats var = round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats round(avg(numberField)) + avg(numberField)', + 'from a_index | stats round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)', [] ); - 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 weighted_avg(doubleField / 2, longField)', []); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = avg(numberField / 2)', + 'from a_index | stats var0 = weighted_avg(doubleField / 2, longField)', [] ); - 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)', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats weighted_avg(doubleField, longField) by round(doubleField / 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 var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2)', + [] + ); - 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(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | stats avg(stringField)', [ - 'Argument of [avg] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | stats var = avg(*)', [ - 'Using wildcards (*) in avg is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | sort avg(numberField)', [ - 'SORT does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | where avg(numberField)', [ - 'WHERE does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(doubleField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(doubleField, integerField)', []); - testErrorsAndWarnings('from a_index | where avg(numberField) > 0', [ - 'WHERE does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(doubleField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | eval var = avg(numberField)', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(doubleField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | eval var = avg(numberField) > 0', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval avg(numberField)', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval avg(numberField) > 0', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(doubleField / 2, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | stats avg(booleanField)', [ - 'Argument of [avg] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats avg(null)', []); - testErrorsAndWarnings('row nullVar = null | stats avg(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(doubleField / 2, integerField)', + [] + ); - 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 avg(doubleField), weighted_avg(doubleField / 2, integerField)', + [] + ); testErrorsAndWarnings( - 'from a_index | stats var = round(sum(numberField)) + sum(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats round(sum(numberField)) + sum(numberField)', + 'from a_index | stats var0 = weighted_avg(doubleField, integerField)', [] ); - 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)', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField)', [] ); - 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)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats weighted_avg(doubleField, integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), doubleField / 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 avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - 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 var = weighted_avg(longField, doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(longField, doubleField)', []); - testErrorsAndWarnings('from a_index | stats sum(stringField)', [ - 'Argument of [sum] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, doubleField))', + [] + ); - testErrorsAndWarnings('from a_index | stats var = sum(*)', [ - 'Using wildcards (*) in sum is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, doubleField))', + [] + ); - testErrorsAndWarnings('from a_index | sort sum(numberField)', [ - 'SORT does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | where sum(numberField)', [ - 'WHERE does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | where sum(numberField) > 0', [ - 'WHERE does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = sum(numberField)', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = sum(numberField) > 0', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | eval sum(numberField)', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(longField, doubleField) by round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | eval sum(numberField) > 0', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | stats sum(booleanField)', [ - 'Argument of [sum] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats sum(null)', []); - testErrorsAndWarnings('row nullVar = null | stats sum(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), ipField', + [] + ); - 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 avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | stats var = round(median(numberField)) + median(numberField)', + 'from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats round(median(numberField)) + median(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - 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 var = weighted_avg(longField, longField)', []); + testErrorsAndWarnings('from a_index | stats weighted_avg(longField, longField)', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, longField))', + [] + ); + testErrorsAndWarnings('from a_index | stats round(weighted_avg(longField, longField))', []); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median(numberField / 2)', + 'from a_index | stats var = round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)', [] ); - 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)', + 'from a_index | stats round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)', [] ); + + testErrorsAndWarnings('from a_index | stats var0 = weighted_avg(longField, longField)', []); + testErrorsAndWarnings( - 'from a_index | stats median(numberField) by round(numberField / 2)', + 'from a_index | stats avg(doubleField), weighted_avg(longField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField', + 'from a_index | stats weighted_avg(longField, longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), ipField', [] ); - 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 avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), doubleField / 2', + [] + ); - 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 avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | stats median(stringField)', [ - 'Argument of [median] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(longField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(longField, integerField)', []); - testErrorsAndWarnings('from a_index | stats var = median(*)', [ - 'Using wildcards (*) in median is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | sort median(numberField)', [ - 'SORT does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | where median(numberField)', [ - 'WHERE does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | where median(numberField) > 0', [ - 'WHERE does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = median(numberField)', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = median(numberField) > 0', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval median(numberField)', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval median(numberField) > 0', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(longField, integerField) by round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | stats median(booleanField)', [ - 'Argument of [median] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats median(null)', []); - testErrorsAndWarnings('row nullVar = null | stats median(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2)', + [] + ); - describe('median_absolute_deviation', () => { testErrorsAndWarnings( - 'from a_index | stats var = median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(numberField)', []); testErrorsAndWarnings( - 'from a_index | stats var = round(median_absolute_deviation(numberField))', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats round(median_absolute_deviation(numberField))', + 'from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)', + 'from a_index | stats var = weighted_avg(integerField, doubleField)', [] ); + testErrorsAndWarnings('from a_index | stats weighted_avg(integerField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | stats median_absolute_deviation(numberField / 2)', + 'from a_index | stats var = round(weighted_avg(integerField, doubleField))', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median_absolute_deviation(numberField / 2)', + 'from a_index | stats round(weighted_avg(integerField, doubleField))', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)', + 'from a_index | stats var = round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)', + 'from a_index | stats round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median_absolute_deviation(numberField)', + 'from a_index | stats var0 = weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)', + 'from a_index | stats weighted_avg(integerField, doubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 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]", - ] + 'from a_index | stats var = weighted_avg(integerField, longField)', + [] ); - - 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 | stats weighted_avg(integerField, longField)', []); testErrorsAndWarnings( - 'from a_index | eval var = median_absolute_deviation(numberField) > 0', - ['EVAL does not support function median_absolute_deviation'] + 'from a_index | stats var = round(weighted_avg(integerField, longField))', + [] ); - 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', - ]); - - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(booleanField)', [ - 'Argument of [median_absolute_deviation] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(null)', []); - testErrorsAndWarnings('row nullVar = null | stats median_absolute_deviation(nullVar)', []); - }); - - 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)', + 'from a_index | stats round(weighted_avg(integerField, longField))', [] ); testErrorsAndWarnings( - 'from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)', + 'from a_index | stats var = round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)', [] ); - 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)', + 'from a_index | stats round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)', + 'from a_index | stats var0 = weighted_avg(integerField, longField)', [] ); - testErrorsAndWarnings('from a_index | stats var0 = percentile(numberField, 5)', []); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), percentile(numberField, 5)', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats percentile(numberField, 5) by round(numberField / 2)', + 'from a_index | stats weighted_avg(integerField, longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)', + 'from a_index | stats var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), doubleField / 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', - ]); - - testErrorsAndWarnings('from a_index | stats percentile(booleanField, 5)', [ - 'Argument of [percentile] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats percentile(null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats percentile(nullVar, nullVar)', [ - 'Argument of [percentile] must be a constant, received [nullVar]', - ]); - }); - - 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)', + 'from a_index | stats var = weighted_avg(integerField, integerField)', [] ); + testErrorsAndWarnings('from a_index | stats weighted_avg(integerField, integerField)', []); testErrorsAndWarnings( - 'from a_index | stats round(max(numberField)) + max(numberField)', + 'from a_index | stats var = round(weighted_avg(integerField, integerField))', [] ); - 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)', + 'from a_index | stats round(weighted_avg(integerField, integerField))', [] ); - 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)', + 'from a_index | stats var = round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats weighted_avg(integerField, integerField) by round(doubleField / 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)', + 'from a_index | stats var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2)', [] ); - 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 | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval max(numberField)', [ - 'EVAL does not support function max', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval max(numberField) > 0', [ - 'EVAL does not support function max', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval var = max(dateField)', [ - 'EVAL does not support function max', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval var = max(dateField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, longField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(dateField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, longField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(dateField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, integerField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats max(booleanField)', []); - testErrorsAndWarnings('from a_index | stats max(null)', []); - testErrorsAndWarnings('row nullVar = null | stats max(nullVar)', []); - testErrorsAndWarnings('from a_index | stats max("2022")', []); - testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', [ - 'Argument of [max] must be [number], found value [concat("20","22")] type [string]', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, integerField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats max(cartesianPointField)', [ - 'Argument of [max] must be [number], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, doubleField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = max(booleanField)', []); - - testErrorsAndWarnings('from a_index | where max(booleanField)', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, doubleField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where max(booleanField) > 0', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, longField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(booleanField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, longField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(booleanField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, integerField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(booleanField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, integerField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(booleanField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, doubleField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = max(ipField)', []); - testErrorsAndWarnings('from a_index | stats max(ipField)', []); - testErrorsAndWarnings('from a_index | where max(ipField)', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, doubleField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where max(ipField) > 0', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, longField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(ipField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, longField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(ipField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, integerField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(ipField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, integerField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(ipField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(doubleField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - }); - - 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', - [] + 'from a_index | eval var = weighted_avg(doubleField, longField) > 0', + ['EVAL does not support function weighted_avg'] ); - 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 | eval weighted_avg(doubleField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats min(stringField)', [ - 'Argument of [min] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = min(*)', [ - 'Using wildcards (*) in min is not allowed', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(doubleField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - 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)', - [] + 'from a_index | eval var = weighted_avg(doubleField, integerField) > 0', + ['EVAL does not support function weighted_avg'] ); - 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 weighted_avg(doubleField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(numberField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, integerField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(numberField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(numberField) > 0', [ - 'EVAL does not support function min', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(longField, doubleField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | eval var = min(dateField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(dateField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, doubleField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(dateField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(dateField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats min(booleanField)', []); - testErrorsAndWarnings('from a_index | stats min(null)', []); - testErrorsAndWarnings('row nullVar = null | stats min(nullVar)', []); - testErrorsAndWarnings('from a_index | stats min("2022")', []); - testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', [ - 'Argument of [min] must be [number], found value [concat("20","22")] type [string]', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats min(cartesianPointField)', [ - 'Argument of [min] must be [number], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = min(booleanField)', []); - - testErrorsAndWarnings('from a_index | where min(booleanField)', [ - 'WHERE does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where min(booleanField) > 0', [ - 'WHERE does not support function min', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(longField, integerField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | eval var = min(booleanField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(booleanField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, integerField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(booleanField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(integerField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(booleanField) > 0', [ - 'EVAL does not support function min', - ]); - testErrorsAndWarnings('from a_index | stats var = min(ipField)', []); - testErrorsAndWarnings('from a_index | stats min(ipField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(integerField, doubleField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | where min(ipField)', [ - 'WHERE does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where min(ipField) > 0', [ - 'WHERE does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, doubleField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(ipField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(integerField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(ipField) > 0', [ - 'EVAL does not support function min', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(integerField, longField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | eval min(ipField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(ipField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - }); - - 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)', - [] + 'from a_index | eval var = weighted_avg(integerField, integerField)', + ['EVAL does not support function weighted_avg'] ); testErrorsAndWarnings( - 'from a_index | stats round(count(stringField)) + count(stringField)', - [] + 'from a_index | eval var = weighted_avg(integerField, integerField) > 0', + ['EVAL does not support function weighted_avg'] ); - 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 weighted_avg(integerField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = count(stringField)', [ - 'EVAL does not support function count', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, integerField) > 0', [ + 'EVAL does not support function weighted_avg', ]); + }); - testErrorsAndWarnings('from a_index | eval var = count(stringField) > 0', [ - 'EVAL does not support function count', - ]); + 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 | eval count(stringField)', [ - 'EVAL does not support function count', + testErrorsAndWarnings('from a_index | stats by bucket(integerField, integerField)', [ + 'Argument of [bucket] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | eval count(stringField) > 0', [ - 'EVAL does not support function count', + testErrorsAndWarnings('from a_index | stats by bin(integerField, integerField)', [ + 'Argument of [bin] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | stats count(null)', []); - testErrorsAndWarnings('row nullVar = null | stats count(nullVar)', []); - }); - describe('count_distinct', () => { testErrorsAndWarnings( - 'from a_index | stats var = count_distinct(stringField, numberField)', - [] + 'from a_index | stats by bucket(dateField, integerField, textField, textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] ); - testErrorsAndWarnings('from a_index | stats count_distinct(stringField, numberField)', []); testErrorsAndWarnings( - 'from a_index | stats var = round(count_distinct(stringField, numberField))', - [] + 'from a_index | stats by bin(dateField, integerField, textField, textField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [textField]', + 'Argument of [bin] must be a constant, received [textField]', + ] ); testErrorsAndWarnings( - 'from a_index | stats round(count_distinct(stringField, numberField))', - [] + 'from a_index | stats by bucket(dateField, integerField, dateField, dateField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [dateField]', + 'Argument of [bucket] must be a constant, received [dateField]', + ] ); testErrorsAndWarnings( - 'from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)', - [] + 'from a_index | stats by bin(dateField, integerField, dateField, dateField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [dateField]', + 'Argument of [bin] must be a constant, received [dateField]', + ] ); testErrorsAndWarnings( - 'from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)', - [] + 'from a_index | stats by bucket(dateField, integerField, textField, dateField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [dateField]', + ] ); - 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'] + 'from a_index | stats by bin(dateField, integerField, textField, dateField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [textField]', + 'Argument of [bin] must be a constant, received [dateField]', + ] ); testErrorsAndWarnings( - 'from a_index | eval var = count_distinct(stringField, numberField) > 0', - ['EVAL does not support function count_distinct'] + 'from a_index | stats by bucket(dateField, integerField, dateField, textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [dateField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] ); - 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', - ]); - testErrorsAndWarnings('from a_index | stats count_distinct(null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats count_distinct(nullVar, nullVar)', []); - }); - - describe('st_centroid_agg', () => { testErrorsAndWarnings( - 'from a_index | stats var = st_centroid_agg(cartesianPointField)', - [] + 'from a_index | stats by bin(dateField, integerField, dateField, textField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [dateField]', + 'Argument of [bin] must be a constant, received [textField]', + ] ); - 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 by bucket(integerField, integerField, integerField, integerField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [integerField]', + ] + ); - 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 by bin(integerField, integerField, integerField, integerField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [integerField]', + ] + ); - 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 | sort bucket(dateField, 1 year)', [ + 'SORT does not support function bucket', ]); - testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(*)', [ - 'Using wildcards (*) in st_centroid_agg is not allowed', - ]); + testErrorsAndWarnings('from a_index | stats bucket(null, null, null, null)', []); - testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(geoPointField)', []); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(geoPointField)', []); + testErrorsAndWarnings( + 'row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)', + [ + 'Argument of [bucket] must be a constant, received [nullVar]', + 'Argument of [bucket] must be a constant, received [nullVar]', + 'Argument of [bucket] must be a constant, received [nullVar]', + ] + ); - testErrorsAndWarnings('from a_index | sort st_centroid_agg(cartesianPointField)', [ - 'SORT does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats bucket("2022", 1 year)', []); + testErrorsAndWarnings('from a_index | stats bucket(concat("20", "22"), 1 year)', [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', ]); - testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField)', [ - 'WHERE does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket("2022", integerField, textField, textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); - testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField) > 0', [ - 'WHERE does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket(concat("20", "22"), integerField, textField, textField)', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); - testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField)', [ - 'WHERE does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats bucket("2022", integerField, "2022", "2022")', [ + 'Argument of [bucket] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField) > 0', [ - 'WHERE does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket(concat("20", "22"), integerField, concat("20", "22"), concat("20", "22"))', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + ] + ); - testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(cartesianPointField)', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket("2022", integerField, textField, "2022")', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); testErrorsAndWarnings( - 'from a_index | eval var = st_centroid_agg(cartesianPointField) > 0', - ['EVAL does not support function st_centroid_agg'] + 'from a_index | stats bucket(concat("20", "22"), integerField, textField, concat("20", "22"))', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + ] ); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField)', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket("2022", integerField, "2022", textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField) > 0', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket(concat("20", "22"), integerField, concat("20", "22"), textField)', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); + }); - testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField)', [ - 'EVAL does not support function st_centroid_agg', + describe('percentile', () => { + testErrorsAndWarnings('from a_index | stats var = percentile(doubleField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]', ]); - - testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField) > 0', [ - 'EVAL does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats percentile(doubleField, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', ]); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField)', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, doubleField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))]', + ] + ); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField) > 0', [ - 'EVAL does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats round(percentile(doubleField, doubleField))', [ + 'Argument of [round] must be a constant, received [percentile(doubleField,doubleField)]', ]); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(booleanField)', [ - 'Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(null)', []); - testErrorsAndWarnings('row nullVar = null | stats st_centroid_agg(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))+percentile(doubleField,doubleField)]', + ] + ); - describe('values', () => { - testErrorsAndWarnings('from a_index | stats var = values(stringField)', []); - testErrorsAndWarnings('from a_index | stats values(stringField)', []); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(doubleField,doubleField))]', + 'Argument of [+] must be a constant, received [percentile(doubleField,doubleField)]', + ] + ); - testErrorsAndWarnings('from a_index | sort values(stringField)', [ - 'SORT does not support function values', + testErrorsAndWarnings('from a_index | stats percentile(doubleField / 2, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField / 2, doubleField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | where values(stringField)', [ - 'WHERE does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField / 2, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - testErrorsAndWarnings('from a_index | where values(stringField) > 0', [ - 'WHERE does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, doubleField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | eval var = values(stringField)', [ - 'EVAL does not support function values', + testErrorsAndWarnings('from a_index | stats var0 = percentile(doubleField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]', ]); - testErrorsAndWarnings('from a_index | eval var = values(stringField) > 0', [ - 'EVAL does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - testErrorsAndWarnings('from a_index | eval values(stringField)', [ - 'EVAL does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField)', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | eval values(stringField) > 0', [ - 'EVAL does not support function values', - ]); - testErrorsAndWarnings('from a_index | stats values(null)', []); - testErrorsAndWarnings('row nullVar = null | stats values(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats percentile(doubleField, doubleField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - 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 var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | stats by bucket(numberField, numberField)', [ - 'Argument of [bucket] must be a constant, received [numberField]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - 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 avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); 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]', - ] + 'from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); - 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 avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); testErrorsAndWarnings( - 'from a_index | stats by bucket(dateField, numberField, dateField, dateField)', + 'from a_index | stats var = percentile(avg(integerField), avg(integerField))', [ - '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]', + 'Argument of [=] must be a constant, received [percentile(avg(integerField),avg(integerField))]', + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ] ); - 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)', + 'from a_index | stats percentile(avg(integerField), avg(integerField))', [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [stringField]', - 'Argument of [bucket] must be a constant, received [dateField]', + 'Argument of [percentile] must be a constant, received [avg(integerField)]', + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ] ); - 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 percentile(booleanField, )', [ + "SyntaxError: no viable alternative at input 'percentile(booleanField, )'", + "SyntaxError: mismatched input ')' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + 'At least one aggregation or grouping expression required in [STATS]', + ]); + testErrorsAndWarnings('from a_index | stats var = percentile(doubleField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,longField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(doubleField, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', + ]); testErrorsAndWarnings( - 'from a_index | stats by bucket(dateField, numberField, dateField, stringField)', + 'from a_index | stats var = round(percentile(doubleField, longField))', [ - '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]', + 'Argument of [=] must be a constant, received [round(percentile(doubleField,longField))]', ] ); - - 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 round(percentile(doubleField, longField))', [ + 'Argument of [round] must be a constant, received [percentile(doubleField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | stats by bucket(numberField, numberField, numberField, numberField)', + 'from a_index | stats var = round(percentile(doubleField, longField)) + percentile(doubleField, longField)', [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [numberField]', + 'Argument of [=] must be a constant, received [round(percentile(doubleField,longField))+percentile(doubleField,longField)]', ] ); - 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', - ]); - testErrorsAndWarnings('from a_index | stats bucket(null, null, null, null)', []); - testErrorsAndWarnings( - 'row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)', + 'from a_index | stats round(percentile(doubleField, longField)) + percentile(doubleField, longField)', [ - 'Argument of [bucket] must be a constant, received [nullVar]', - 'Argument of [bucket] must be a constant, received [nullVar]', - 'Argument of [bucket] must be a constant, received [nullVar]', + 'Argument of [+] must be a constant, received [round(percentile(doubleField,longField))]', + 'Argument of [+] must be a constant, received [percentile(doubleField,longField)]', ] ); - testErrorsAndWarnings('from a_index | stats bucket("2022", 1 year)', []); - testErrorsAndWarnings('from a_index | stats bucket(concat("20", "22"), 1 year)', [ - 'Argument of [bucket] must be [date], found value [concat("20","22")] type [string]', - ]); - testErrorsAndWarnings('from a_index | stats by bucket(concat("20", "22"), 1 year)', [ - 'Argument of [bucket] must be [date], found value [concat("20","22")] type [string]', - ]); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "a", "a")', []); - testErrorsAndWarnings('from a_index | stats bucket(concat("20", "22"), 5, "a", "a")', [ - 'Argument of [bucket] must be [date], found value [concat("20","22")] type [string]', + + testErrorsAndWarnings('from a_index | stats percentile(doubleField / 2, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', ]); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "2022", "2022")', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField / 2, longField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]'] + ); testErrorsAndWarnings( - 'from a_index | stats bucket(concat("20", "22"), 5, concat("20", "22"), concat("20", "22"))', - ['Argument of [bucket] must be [date], found value [concat("20","22")] type [string]'] + 'from a_index | stats avg(doubleField), percentile(doubleField / 2, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "a", "2022")', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, longField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]'] + ); + + testErrorsAndWarnings('from a_index | stats var0 = percentile(doubleField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | stats bucket(concat("20", "22"), 5, "a", concat("20", "22"))', - ['Argument of [bucket] must be [date], found value [concat("20","22")] type [string]'] + 'from a_index | stats avg(doubleField), percentile(doubleField, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "2022", "a")', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField)', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); testErrorsAndWarnings( - 'from a_index | stats bucket(concat("20", "22"), 5, concat("20", "22"), "a")', - ['Argument of [bucket] must be [date], found value [concat("20","22")] type [string]'] + 'from a_index | stats percentile(doubleField, longField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - }); - describe('cbrt', () => { - testErrorsAndWarnings('row var = cbrt(5)', []); - testErrorsAndWarnings('row cbrt(5)', []); - testErrorsAndWarnings('row var = cbrt(to_integer(true))', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); - testErrorsAndWarnings('row var = cbrt(true)', [ - 'Argument of [cbrt] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [longField]'] + ); - testErrorsAndWarnings('from a_index | where cbrt(numberField) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); - testErrorsAndWarnings('from a_index | where cbrt(booleanField) > 0', [ - 'Argument of [cbrt] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [longField]'] + ); - testErrorsAndWarnings('from a_index | eval var = cbrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval cbrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = cbrt(to_integer(booleanField))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); - testErrorsAndWarnings('from a_index | eval cbrt(booleanField)', [ - 'Argument of [cbrt] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var = percentile(doubleField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,integerField)]', ]); - - testErrorsAndWarnings('from a_index | eval var = cbrt(*)', [ - 'Using wildcards (*) in cbrt is not allowed', + testErrorsAndWarnings('from a_index | stats percentile(doubleField, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | eval cbrt(numberField, extraArg)', [ - 'Error: [cbrt] function expects exactly one argument, got 2.', + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, integerField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))]', + ] + ); + + testErrorsAndWarnings('from a_index | stats round(percentile(doubleField, integerField))', [ + 'Argument of [round] must be a constant, received [percentile(doubleField,integerField)]', ]); - testErrorsAndWarnings('from a_index | sort cbrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval cbrt(null)', []); - testErrorsAndWarnings('row nullVar = null | eval cbrt(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))+percentile(doubleField,integerField)]', + ] + ); - describe('from_base64', () => { - testErrorsAndWarnings('row var = from_base64("a")', []); - testErrorsAndWarnings('row from_base64("a")', []); - testErrorsAndWarnings('row var = from_base64(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(doubleField,integerField))]', + 'Argument of [+] must be a constant, received [percentile(doubleField,integerField)]', + ] + ); - testErrorsAndWarnings('row var = from_base64(true)', [ - 'Argument of [from_base64] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | stats percentile(doubleField / 2, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | where length(from_base64(stringField)) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField / 2, integerField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]'] + ); - testErrorsAndWarnings('from a_index | where length(from_base64(booleanField)) > 0', [ - 'Argument of [from_base64] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField / 2, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | eval var = from_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval from_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = from_base64(to_string(booleanField))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, integerField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]'] + ); - testErrorsAndWarnings('from a_index | eval from_base64(booleanField)', [ - 'Argument of [from_base64] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var0 = percentile(doubleField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,integerField)]', ]); - testErrorsAndWarnings('from a_index | eval var = from_base64(*)', [ - 'Using wildcards (*) in from_base64 is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | eval from_base64(stringField, extraArg)', [ - 'Error: [from_base64] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField)', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | sort from_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval from_base64(null)', []); - testErrorsAndWarnings('row nullVar = null | eval from_base64(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats percentile(doubleField, integerField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - describe('locate', () => { - testErrorsAndWarnings('row var = locate("a", "a")', []); - testErrorsAndWarnings('row locate("a", "a")', []); - testErrorsAndWarnings('row var = locate(to_string(true), to_string(true))', []); - testErrorsAndWarnings('row var = locate("a", "a", 5)', []); - testErrorsAndWarnings('row locate("a", "a", 5)', []); testErrorsAndWarnings( - 'row var = locate(to_string(true), to_string(true), to_integer(true))', - [] + 'from a_index | stats var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] ); - testErrorsAndWarnings('row var = locate(true, true, true)', [ - 'Argument of [locate] must be [string], found value [true] type [boolean]', - 'Argument of [locate] must be [string], found value [true] type [boolean]', - 'Argument of [locate] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | where locate(stringField, stringField) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | where locate(booleanField, booleanField) > 0', [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); testErrorsAndWarnings( - 'from a_index | where locate(stringField, stringField, numberField) > 0', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] ); + testErrorsAndWarnings('from a_index | stats var = percentile(longField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,doubleField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(longField, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', + ]); testErrorsAndWarnings( - 'from a_index | where locate(booleanField, booleanField, booleanField) > 0', + 'from a_index | stats var = round(percentile(longField, doubleField))', [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [number], found value [booleanField] type [boolean]', + 'Argument of [=] must be a constant, received [round(percentile(longField,doubleField))]', ] ); + testErrorsAndWarnings('from a_index | stats round(percentile(longField, doubleField))', [ + 'Argument of [round] must be a constant, received [percentile(longField,doubleField)]', + ]); - testErrorsAndWarnings('from a_index | eval var = locate(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval locate(stringField, stringField)', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(longField, doubleField)) + percentile(longField, doubleField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,doubleField))+percentile(longField,doubleField)]', + ] + ); testErrorsAndWarnings( - 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | stats round(percentile(longField, doubleField)) + percentile(longField, doubleField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(longField,doubleField))]', + 'Argument of [+] must be a constant, received [percentile(longField,doubleField)]', + ] ); - testErrorsAndWarnings('from a_index | eval locate(booleanField, booleanField)', [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var0 = percentile(longField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,doubleField)]', ]); testErrorsAndWarnings( - 'from a_index | eval var = locate(stringField, stringField, numberField)', - [] + 'from a_index | stats avg(doubleField), percentile(longField, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval locate(stringField, stringField, numberField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField)', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats percentile(longField, doubleField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval locate(booleanField, booleanField, booleanField)', - [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval locate(stringField, stringField, numberField, extraArg)', - ['Error: [locate] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); - testErrorsAndWarnings('from a_index | sort locate(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval locate(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval locate(nullVar, nullVar, nullVar)', []); - }); - - describe('to_base64', () => { - testErrorsAndWarnings('row var = to_base64("a")', []); - testErrorsAndWarnings('row to_base64("a")', []); - testErrorsAndWarnings('row var = to_base64(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] + ); - testErrorsAndWarnings('row var = to_base64(true)', [ - 'Argument of [to_base64] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - testErrorsAndWarnings('from a_index | where length(to_base64(stringField)) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | where length(to_base64(booleanField)) > 0', [ - 'Argument of [to_base64] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var = percentile(longField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,longField)]', ]); - - testErrorsAndWarnings('from a_index | eval var = to_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_base64(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_base64(booleanField)', [ - 'Argument of [to_base64] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats percentile(longField, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', ]); - - testErrorsAndWarnings('from a_index | eval var = to_base64(*)', [ - 'Using wildcards (*) in to_base64 is not allowed', + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(longField, longField))', + ['Argument of [=] must be a constant, received [round(percentile(longField,longField))]'] + ); + testErrorsAndWarnings('from a_index | stats round(percentile(longField, longField))', [ + 'Argument of [round] must be a constant, received [percentile(longField,longField)]', ]); - testErrorsAndWarnings('from a_index | eval to_base64(stringField, extraArg)', [ - 'Error: [to_base64] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(longField, longField)) + percentile(longField, longField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,longField))+percentile(longField,longField)]', + ] + ); - testErrorsAndWarnings('from a_index | sort to_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_base64(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_base64(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(longField, longField)) + percentile(longField, longField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(longField,longField))]', + 'Argument of [+] must be a constant, received [percentile(longField,longField)]', + ] + ); - describe('ip_prefix', () => { - testErrorsAndWarnings('row var = ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); - testErrorsAndWarnings('row ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); + testErrorsAndWarnings('from a_index | stats var0 = percentile(longField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,longField)]', + ]); testErrorsAndWarnings( - 'row var = ip_prefix(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('row var = ip_prefix(true, true, true)', [ - 'Argument of [ip_prefix] must be [ip], found value [true] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [true] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(longField, longField)', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] + ); testErrorsAndWarnings( - 'from a_index | eval var = ip_prefix(ipField, numberField, numberField)', - [] + 'from a_index | stats percentile(longField, longField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval ip_prefix(ipField, numberField, numberField)', - [] + 'from a_index | stats var0 = percentile(longField, longField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval ip_prefix(booleanField, booleanField, booleanField)', - [ - 'Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] ); testErrorsAndWarnings( - 'from a_index | eval ip_prefix(ipField, numberField, numberField, extraArg)', - ['Error: [ip_prefix] function expects exactly 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | sort ip_prefix(ipField, numberField, numberField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval ip_prefix(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)', []); - }); - describe('mv_append', () => { - testErrorsAndWarnings('row var = mv_append(true, true)', []); - testErrorsAndWarnings('row mv_append(true, true)', []); - testErrorsAndWarnings('row var = mv_append(to_boolean(true), to_boolean(true))', []); + testErrorsAndWarnings('from a_index | stats var = percentile(longField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,integerField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(longField, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', + ]); testErrorsAndWarnings( - 'row var = mv_append(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] + 'from a_index | stats var = round(percentile(longField, integerField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,integerField))]', + ] ); + testErrorsAndWarnings('from a_index | stats round(percentile(longField, integerField))', [ + 'Argument of [round] must be a constant, received [percentile(longField,integerField)]', + ]); + testErrorsAndWarnings( - 'row mv_append(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] + 'from a_index | stats var = round(percentile(longField, integerField)) + percentile(longField, integerField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,integerField))+percentile(longField,integerField)]', + ] ); testErrorsAndWarnings( - 'row var = mv_append(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] + 'from a_index | stats round(percentile(longField, integerField)) + percentile(longField, integerField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(longField,integerField))]', + 'Argument of [+] must be a constant, received [percentile(longField,integerField)]', + ] ); + testErrorsAndWarnings('from a_index | stats var0 = percentile(longField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,integerField)]', + ]); + testErrorsAndWarnings( - 'row var = mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] ); testErrorsAndWarnings( - 'row mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, integerField)', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); testErrorsAndWarnings( - 'row var = mv_append(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', - [] + 'from a_index | stats percentile(longField, integerField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [integerField]'] ); - testErrorsAndWarnings('row var = mv_append(now(), now())', []); - testErrorsAndWarnings('row mv_append(now(), now())', []); - testErrorsAndWarnings('row var = mv_append(to_datetime(now()), to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_append(5, 5)', []); - testErrorsAndWarnings('row mv_append(5, 5)', []); - testErrorsAndWarnings('row var = mv_append(to_integer(true), to_integer(true))', []); - testErrorsAndWarnings( - 'row var = mv_append(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] + 'from a_index | stats var0 = percentile(longField, integerField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); testErrorsAndWarnings( - 'row mv_append(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [integerField]'] ); testErrorsAndWarnings( - 'row var = mv_append(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); testErrorsAndWarnings( - 'row var = mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [integerField]'] ); testErrorsAndWarnings( - 'row mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); + testErrorsAndWarnings('from a_index | stats var = percentile(integerField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,doubleField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(integerField, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', + ]); + testErrorsAndWarnings( - 'row var = mv_append(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', - [] + 'from a_index | stats var = round(percentile(integerField, doubleField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))]', + ] ); - testErrorsAndWarnings('row var = mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('from a_index | stats round(percentile(integerField, doubleField))', [ + 'Argument of [round] must be a constant, received [percentile(integerField,doubleField)]', + ]); testErrorsAndWarnings( - 'row var = mv_append(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', - [] + 'from a_index | stats var = round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))+percentile(integerField,doubleField)]', + ] ); - testErrorsAndWarnings('row var = mv_append("a", "a")', []); - testErrorsAndWarnings('row mv_append("a", "a")', []); - testErrorsAndWarnings('row var = mv_append(to_string(true), to_string(true))', []); - testErrorsAndWarnings('row var = mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_append(to_version("a"), to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_append(numberField, numberField) > 0', []); testErrorsAndWarnings( - 'from a_index | where length(mv_append(stringField, stringField)) > 0', - [] + 'from a_index | stats round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(integerField,doubleField))]', + 'Argument of [+] must be a constant, received [percentile(integerField,doubleField)]', + ] ); + + testErrorsAndWarnings('from a_index | stats var0 = percentile(integerField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,doubleField)]', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = mv_append(booleanField, booleanField)', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); - testErrorsAndWarnings('from a_index | eval mv_append(booleanField, booleanField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField)', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)', - [] + 'from a_index | stats percentile(integerField, doubleField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval mv_append(cartesianPointField, cartesianPointField)', - [] + 'from a_index | stats var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(dateField, dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | stats var = percentile(integerField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,longField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(integerField, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))', - [] + 'from a_index | stats var = round(percentile(integerField, longField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,longField))]', + ] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | stats round(percentile(integerField, longField))', [ + 'Argument of [round] must be a constant, received [percentile(integerField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats var = round(percentile(integerField, longField)) + percentile(integerField, longField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,longField))+percentile(integerField,longField)]', + ] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(geoPointField, geoPointField)', - [] + 'from a_index | stats round(percentile(integerField, longField)) + percentile(integerField, longField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(integerField,longField))]', + 'Argument of [+] must be a constant, received [percentile(integerField,longField)]', + ] ); - testErrorsAndWarnings('from a_index | eval mv_append(geoPointField, geoPointField)', []); + + testErrorsAndWarnings('from a_index | stats var0 = percentile(integerField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(geoShapeField, geoShapeField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, longField)', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval mv_append(geoShapeField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))', - [] + 'from a_index | stats percentile(integerField, longField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(ipField, ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(ipField, ipField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))', - [] + 'from a_index | stats var0 = percentile(integerField, longField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(stringField, stringField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(versionField, versionField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval mv_append(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_version(stringField), to_version(stringField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval mv_append(booleanField, booleanField, extraArg)', - ['Error: [mv_append] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | sort mv_append(booleanField, booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_append(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | stats var = percentile(integerField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,integerField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(integerField, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', + ]); - describe('repeat', () => { - testErrorsAndWarnings('row var = repeat("a", 5)', []); - testErrorsAndWarnings('row repeat("a", 5)', []); - testErrorsAndWarnings('row var = repeat(to_string(true), to_integer(true))', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(integerField, integerField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,integerField))]', + ] + ); - testErrorsAndWarnings('row var = repeat(true, true)', [ - 'Argument of [repeat] must be [string], found value [true] type [boolean]', - 'Argument of [repeat] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(integerField, integerField))', + [ + 'Argument of [round] must be a constant, received [percentile(integerField,integerField)]', + ] + ); testErrorsAndWarnings( - 'from a_index | where length(repeat(stringField, numberField)) > 0', - [] + 'from a_index | stats var = round(percentile(integerField, integerField)) + percentile(integerField, integerField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,integerField))+percentile(integerField,integerField)]', + ] ); testErrorsAndWarnings( - 'from a_index | where length(repeat(booleanField, booleanField)) > 0', + 'from a_index | stats round(percentile(integerField, integerField)) + percentile(integerField, integerField)', [ - 'Argument of [repeat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [repeat] must be [number], found value [booleanField] type [boolean]', + 'Argument of [+] must be a constant, received [round(percentile(integerField,integerField))]', + 'Argument of [+] must be a constant, received [percentile(integerField,integerField)]', ] ); - testErrorsAndWarnings('from a_index | eval var = repeat(stringField, numberField)', []); - testErrorsAndWarnings('from a_index | eval repeat(stringField, numberField)', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(integerField, integerField)', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); testErrorsAndWarnings( - 'from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] ); - testErrorsAndWarnings('from a_index | eval repeat(booleanField, booleanField)', [ - 'Argument of [repeat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [repeat] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField)', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | eval repeat(stringField, numberField, extraArg)', [ - 'Error: [repeat] function expects exactly 2 arguments, got 3.', - ]); + testErrorsAndWarnings( + 'from a_index | stats percentile(integerField, integerField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | sort repeat(stringField, numberField)', []); - testErrorsAndWarnings('from a_index | eval repeat(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval repeat(nullVar, nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - describe('top', () => { - describe('no errors on correct usage', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, 3, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, 1, "desc")', []); - testErrorsAndWarnings('from a_index | stats var = top(stringField, 5, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, 5, "asc")', []); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - describe('errors on invalid argument count', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, 3)', [ - 'Error: [top] function expects exactly 3 arguments, got 2.', - ]); - testErrorsAndWarnings('from a_index | stats var = top(stringField)', [ - 'Error: [top] function expects exactly 3 arguments, got 1.', - ]); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - describe('limit must be a literal', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, numberField, "asc")', [ - 'Argument of [=] must be a constant, received [top(stringField,numberField,"asc")]', - ]); - testErrorsAndWarnings( - 'from a_index | stats var = top(stringField, 100 + numberField, "asc")', - [ - 'Argument of [=] must be a constant, received [top(stringField,100+numberField,"asc")]', - ] - ); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - describe('order must be "asc" or "desc"', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, 1, stringField)', [ - 'Argument of [=] must be a constant, received [top(stringField,1,stringField)]', - ]); - testErrorsAndWarnings( - 'from a_index | stats var = top(stringField, 1, "asdf")', - [], - ['Invalid option ["asdf"] for top. Supported options: ["asc", "desc"].'] - ); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | sort top(stringField, numberField, "asc")', [ - 'SORT does not support function top', + testErrorsAndWarnings('from a_index | sort percentile(doubleField, doubleField)', [ + 'SORT does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, numberField, "asc")', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, doubleField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, numberField, "asc") > 0', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, doubleField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = top(stringField, numberField, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, longField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings( - 'from a_index | eval var = top(stringField, numberField, "asc") > 0', - ['EVAL does not support function top'] - ); - - testErrorsAndWarnings('from a_index | eval top(stringField, numberField, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, longField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval top(stringField, numberField, "asc") > 0', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, integerField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | sort top(stringField, 5, "asc")', [ - 'SORT does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, integerField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, 5, "asc")', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, doubleField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, 5, "asc") > 0', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, doubleField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = top(stringField, 5, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, longField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = top(stringField, 5, "asc") > 0', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, longField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval top(stringField, 5, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, integerField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval top(stringField, 5, "asc") > 0', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, integerField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | stats var = top(stringField, 5, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, 5, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, numberField, "asc")', [ - 'Argument of [top] must be a constant, received [numberField]', + testErrorsAndWarnings('from a_index | where percentile(integerField, doubleField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | stats top(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats top(nullVar, nullVar, nullVar)', [ - 'Argument of [top] must be a constant, received [nullVar]', - 'Argument of [top] must be a constant, received [nullVar]', + testErrorsAndWarnings('from a_index | where percentile(integerField, doubleField) > 0', [ + 'WHERE does not support function percentile', ]); - }); - - describe('st_distance', () => { - testErrorsAndWarnings( - 'row var = st_distance(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row st_distance(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row var = st_distance(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] - ); - - testErrorsAndWarnings( - 'row var = st_distance(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row st_distance(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row var = st_distance(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', - [] - ); - testErrorsAndWarnings('row var = st_distance(true, true)', [ - 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where percentile(integerField, longField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)', - [] - ); - - testErrorsAndWarnings( - 'from a_index | eval st_distance(cartesianPointField, cartesianPointField)', - [] - ); + testErrorsAndWarnings('from a_index | where percentile(integerField, longField) > 0', [ + 'WHERE does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] - ); + testErrorsAndWarnings('from a_index | where percentile(integerField, integerField)', [ + 'WHERE does not support function percentile', + ]); - testErrorsAndWarnings('from a_index | eval st_distance(booleanField, booleanField)', [ - 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where percentile(integerField, integerField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_distance(geoPointField, geoPointField)', - [] - ); - testErrorsAndWarnings('from a_index | eval st_distance(geoPointField, geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, doubleField)', [ + 'EVAL does not support function percentile', + ]); testErrorsAndWarnings( - 'from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | eval var = percentile(doubleField, doubleField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings( - 'from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_distance] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, doubleField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | sort st_distance(cartesianPointField, cartesianPointField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, doubleField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings('from a_index | eval st_distance(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_distance(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, longField)', [ + 'EVAL does not support function percentile', + ]); - describe('weighted_avg', () => { - testErrorsAndWarnings( - 'from a_index | stats var = weighted_avg(numberField, numberField)', - [] - ); - testErrorsAndWarnings('from a_index | stats weighted_avg(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var = round(weighted_avg(numberField, numberField))', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, longField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats round(weighted_avg(numberField, numberField))', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var = round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, integerField)', [ + 'EVAL does not support function percentile', + ]); testErrorsAndWarnings( - 'from a_index | stats round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)', - [] + 'from a_index | eval var = percentile(doubleField, integerField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings( - 'from a_index | stats weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, integerField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var0 = weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, integerField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, doubleField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, doubleField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var0 = weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, doubleField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, doubleField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, longField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats weighted_avg(numberField, numberField) by round(numberField / 2)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, longField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), ipField', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), ipField', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, integerField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), numberField / 2', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, integerField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), numberField / 2', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, integerField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var = weighted_avg(avg(numberField), avg(numberField))', - [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, integerField) > 0', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, doubleField)', [ + 'EVAL does not support function percentile', + ]); testErrorsAndWarnings( - 'from a_index | stats weighted_avg(avg(numberField), avg(numberField))', - [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ] + 'from a_index | eval var = percentile(integerField, doubleField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings('from a_index | stats weighted_avg(booleanField, booleanField)', [ - 'Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]', - 'Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval percentile(integerField, doubleField)', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | sort weighted_avg(numberField, numberField)', [ - 'SORT does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, doubleField) > 0', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where weighted_avg(numberField, numberField)', [ - 'WHERE does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, longField)', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where weighted_avg(numberField, numberField) > 0', [ - 'WHERE does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, longField) > 0', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = weighted_avg(numberField, numberField)', [ - 'EVAL does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, longField)', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval percentile(integerField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, integerField)', [ + 'EVAL does not support function percentile', ]); testErrorsAndWarnings( - 'from a_index | eval var = weighted_avg(numberField, numberField) > 0', - ['EVAL does not support function weighted_avg'] + 'from a_index | eval var = percentile(integerField, integerField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings('from a_index | eval weighted_avg(numberField, numberField)', [ - 'EVAL does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, integerField)', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval weighted_avg(numberField, numberField) > 0', [ - 'EVAL does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, integerField) > 0', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | stats weighted_avg(null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats weighted_avg(nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | stats percentile(null, null)', []); + testErrorsAndWarnings('row nullVar = null | stats percentile(nullVar, nullVar)', [ + 'Argument of [percentile] must be a constant, received [nullVar]', + ]); }); - describe('exp', () => { - testErrorsAndWarnings('row var = exp(5)', []); - testErrorsAndWarnings('row exp(5)', []); - testErrorsAndWarnings('row var = exp(to_integer(true))', []); - - testErrorsAndWarnings('row var = exp(true)', [ - 'Argument of [exp] must be [number], found value [true] type [boolean]', + describe('to_string', () => { + testErrorsAndWarnings('row var = to_string(true)', []); + testErrorsAndWarnings('row to_string(true)', []); + testErrorsAndWarnings('row var = to_str(true)', []); + testErrorsAndWarnings('row var = to_string(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_string(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row to_string(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = to_str(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', ]); + testErrorsAndWarnings('row var = to_string(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_string(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_string(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_str(to_datetime("2021-01-01T00:00:00Z"))', []); - testErrorsAndWarnings('from a_index | where exp(numberField) > 0', []); + testErrorsAndWarnings( + 'row var = to_string(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); - testErrorsAndWarnings('from a_index | where exp(booleanField) > 0', [ - 'Argument of [exp] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('row var = to_string(5.5)', []); - testErrorsAndWarnings('from a_index | eval var = exp(numberField)', []); - testErrorsAndWarnings('from a_index | eval exp(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = exp(to_integer(booleanField))', []); + testErrorsAndWarnings('row to_string(5.5)', []); + testErrorsAndWarnings('row var = to_str(5.5)', []); + testErrorsAndWarnings('row var = to_string(to_double(true))', []); + testErrorsAndWarnings('row var = to_string(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row to_string(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = to_str(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_string(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_string(5)', []); + testErrorsAndWarnings('row to_string(5)', []); + testErrorsAndWarnings('row var = to_str(5)', []); + testErrorsAndWarnings('row var = to_string(to_integer(true))', []); + testErrorsAndWarnings('row var = to_string(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row to_string(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_str(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_string(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = to_string("a")', []); + testErrorsAndWarnings('row to_string("a")', []); + testErrorsAndWarnings('row var = to_str("a")', []); + testErrorsAndWarnings('row var = to_string(to_string(true))', []); + testErrorsAndWarnings('row var = to_string(to_version("1.0.0"))', []); + testErrorsAndWarnings('row to_string(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_str(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_string(to_version("a"))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval exp(booleanField)', [ - 'Argument of [exp] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval to_string(counterDoubleField)', [ + 'Argument of [to_string] must be [boolean], found value [counterDoubleField] type [counter_double]', ]); - testErrorsAndWarnings('from a_index | eval var = exp(*)', [ - 'Using wildcards (*) in exp is not allowed', + testErrorsAndWarnings('from a_index | eval var = to_string(*)', [ + 'Using wildcards (*) in to_string is not allowed', ]); - testErrorsAndWarnings('from a_index | eval exp(numberField, extraArg)', [ - 'Error: [exp] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = to_string(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval to_string(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_string(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_string(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_string(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_string(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_string(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_string(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_geopoint(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_string(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_string(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(geoShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_geoshape(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_string(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_string(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_string(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_string(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(longField)', []); + testErrorsAndWarnings('from a_index | eval to_string(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(textField)', []); + testErrorsAndWarnings('from a_index | eval to_string(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_string(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(versionField)', []); + testErrorsAndWarnings('from a_index | eval to_string(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval to_string(booleanField, extraArg)', [ + 'Error: [to_string] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort exp(numberField)', []); - testErrorsAndWarnings('from a_index | eval exp(null)', []); - testErrorsAndWarnings('row nullVar = null | eval exp(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_string(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_string(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_string("2022")', []); + testErrorsAndWarnings('from a_index | eval to_string(concat("20", "22"))', []); }); }); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index cea9dccbd8d97..6cc515dc4ac74 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -76,6 +76,7 @@ import { import { collapseWrongArgumentTypeMessages, getMaxMinNumberOfParams } from './helpers'; import { getParamAtPosition } from '../autocomplete/helper'; import { METADATA_FIELDS } from '../shared/constants'; +import { isStringType } from '../shared/esql_types'; function validateFunctionLiteralArg( astFunction: ESQLFunction, @@ -879,6 +880,7 @@ function validateColumnForCommand( if (columnParamsWithInnerTypes.length) { const hasSomeWrongInnerTypes = columnParamsWithInnerTypes.every(({ innerType }) => { + if (innerType === 'string' && isStringType(columnRef.type)) return false; return innerType !== 'any' && innerType !== columnRef.type; }); if (hasSomeWrongInnerTypes) { diff --git a/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts b/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts index dc51bbbb126d6..d664333129fb1 100644 --- a/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts +++ b/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts @@ -118,7 +118,9 @@ function initChromiumOptions(browserType: Browsers, acceptInsecureCerts: boolean // Bypass the media stream infobar by selecting the default device for media streams (e.g. WebRTC). Works with --use-fake-device-for-media-stream. 'use-fake-ui-for-media-stream', // Do not show "Choose your search engine" dialog (> Chrome v127) - 'disable-search-engine-choice-screen' + 'disable-search-engine-choice-screen', + // Disable component updater used for Chrome Certificate Verifier + 'disable-component-update' ); if (process.platform === 'linux') { diff --git a/packages/kbn-monaco/src/monaco_imports.ts b/packages/kbn-monaco/src/monaco_imports.ts index 41109a35fa160..f7f81b03f371b 100644 --- a/packages/kbn-monaco/src/monaco_imports.ts +++ b/packages/kbn-monaco/src/monaco_imports.ts @@ -31,6 +31,7 @@ import 'monaco-editor/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js import 'monaco-editor/esm/vs/editor/contrib/codeAction/browser/codeActionModel.js'; import 'monaco-editor/esm/vs/editor/contrib/find/browser/findController'; // Needed for Search bar functionality +import 'monaco-editor/esm/vs/editor/standalone/browser/inspectTokens/inspectTokens.js'; // Needed for inspect tokens functionality import 'monaco-editor/esm/vs/language/json/monaco.contribution.js'; import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution.js'; // Needed for basic javascript support diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts index 925471719b345..363888566aa31 100644 --- a/packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts @@ -10,12 +10,32 @@ import { OpenAPIV3 } from 'openapi-types'; export function createBlankOpenApiDocument( oasVersion: string, - info: OpenAPIV3.InfoObject + overrides?: Partial ): OpenAPIV3.Document { return { openapi: oasVersion, - info, - servers: [ + info: overrides?.info ?? { + title: 'Merged OpenAPI specs', + version: 'not specified', + }, + paths: overrides?.paths ?? {}, + components: { + schemas: overrides?.components?.schemas, + responses: overrides?.components?.responses, + parameters: overrides?.components?.parameters, + examples: overrides?.components?.examples, + requestBodies: overrides?.components?.requestBodies, + headers: overrides?.components?.headers, + securitySchemes: overrides?.components?.securitySchemes ?? { + BasicAuth: { + type: 'http', + scheme: 'basic', + }, + }, + links: overrides?.components?.links, + callbacks: overrides?.components?.callbacks, + }, + servers: overrides?.servers ?? [ { url: 'http://{kibana_host}:{port}', variables: { @@ -28,19 +48,12 @@ export function createBlankOpenApiDocument( }, }, ], - security: [ + security: overrides?.security ?? [ { BasicAuth: [], }, ], - paths: {}, - components: { - securitySchemes: { - BasicAuth: { - type: 'http', - scheme: 'basic', - }, - }, - }, + tags: overrides?.tags, + externalDocs: overrides?.externalDocs, }; } diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.ts index 24e507bd0e283..b430ac174b370 100644 --- a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.ts +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.ts @@ -17,8 +17,9 @@ import { mergeTags } from './merge_tags'; import { getOasVersion } from '../../utils/get_oas_version'; import { getOasDocumentVersion } from '../../utils/get_oas_document_version'; import { enrichWithVersionMimeParam } from './enrich_with_version_mime_param'; +import { MergeOptions } from './merge_options'; -export interface MergeDocumentsOptions { +interface MergeDocumentsOptions extends MergeOptions { splitDocumentsByVersion: boolean; } @@ -52,10 +53,20 @@ export async function mergeDocuments( ...documentsGroup, ]; - mergedDocument.servers = mergeServers(documentsToMerge); - mergedDocument.paths = mergePaths(documentsToMerge); - mergedDocument.components = mergeSharedComponents(documentsToMerge); - mergedDocument.security = mergeSecurityRequirements(documentsToMerge); + mergedDocument.paths = mergePaths(documentsToMerge, options); + mergedDocument.components = { + ...mergedDocument.components, + ...mergeSharedComponents(documentsToMerge, options), + }; + + if (!options.skipServers) { + mergedDocument.servers = mergeServers(documentsToMerge); + } + + if (!options.skipSecurity) { + mergedDocument.security = mergeSecurityRequirements(documentsToMerge); + } + mergedDocument.tags = mergeTags(documentsToMerge); mergedByVersion.set(mergedDocument.info.version, mergedDocument); diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_operations.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_operations.ts index c7a4ae4edbd7f..e0b4c3972d6c1 100644 --- a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_operations.ts +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_operations.ts @@ -11,10 +11,12 @@ import deepEqual from 'fast-deep-equal'; import { OpenAPIV3 } from 'openapi-types'; import { KNOWN_HTTP_METHODS } from './http_methods'; import { isRefNode } from '../process_document'; +import { MergeOptions } from './merge_options'; export function mergeOperations( sourcePathItem: OpenAPIV3.PathItemObject, - mergedPathItem: OpenAPIV3.PathItemObject + mergedPathItem: OpenAPIV3.PathItemObject, + options: MergeOptions ) { for (const httpMethod of KNOWN_HTTP_METHODS) { const sourceOperation = sourcePathItem[httpMethod]; @@ -24,12 +26,18 @@ export function mergeOperations( continue; } - if (!mergedOperation || deepEqual(sourceOperation, mergedOperation)) { - mergedPathItem[httpMethod] = sourceOperation; + const normalizedSourceOperation = { + ...sourceOperation, + ...(options.skipServers ? { servers: undefined } : { servers: sourceOperation.servers }), + ...(options.skipSecurity ? { security: undefined } : { security: sourceOperation.security }), + }; + + if (!mergedOperation || deepEqual(normalizedSourceOperation, mergedOperation)) { + mergedPathItem[httpMethod] = normalizedSourceOperation; continue; } - mergeOperation(sourceOperation, mergedOperation); + mergeOperation(normalizedSourceOperation, mergedOperation); } } diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_options.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_options.ts new file mode 100644 index 0000000000000..24bb048b2a5ed --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_options.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 MergeOptions { + skipServers: boolean; + skipSecurity: boolean; +} diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts index d1a775e07b278..938da557aa07b 100644 --- a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts @@ -12,8 +12,12 @@ import { ResolvedDocument } from '../ref_resolver/resolved_document'; import { isRefNode } from '../process_document'; import { mergeOperations } from './merge_operations'; import { mergeArrays } from './merge_arrays'; +import { MergeOptions } from './merge_options'; -export function mergePaths(resolvedDocuments: ResolvedDocument[]): OpenAPIV3.PathsObject { +export function mergePaths( + resolvedDocuments: ResolvedDocument[], + options: MergeOptions +): OpenAPIV3.PathsObject { const mergedPaths: Record = {}; for (const { absolutePath, document } of resolvedDocuments) { @@ -60,7 +64,7 @@ export function mergePaths(resolvedDocuments: ResolvedDocument[]): OpenAPIV3.Pat } try { - mergeOperations(sourcePathItem, mergedPathItem); + mergeOperations(sourcePathItem, mergedPathItem, options); } catch (e) { throw new Error( `❌ Unable to merge ${chalk.bold(absolutePath)} due to an error in ${chalk.bold( @@ -69,7 +73,9 @@ export function mergePaths(resolvedDocuments: ResolvedDocument[]): OpenAPIV3.Pat ); } - mergePathItemServers(sourcePathItem, mergedPathItem); + if (!options.skipServers) { + mergePathItemServers(sourcePathItem, mergedPathItem); + } try { mergeParameters(sourcePathItem, mergedPathItem); diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.ts index 2efddc09e1de0..10b9300f69935 100644 --- a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.ts +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.ts @@ -12,6 +12,7 @@ import { OpenAPIV3 } from 'openapi-types'; import { ResolvedDocument } from '../ref_resolver/resolved_document'; import { extractObjectByJsonPointer } from '../../utils/extract_by_json_pointer'; import { logger } from '../../logger'; +import { MergeOptions } from './merge_options'; const MERGEABLE_COMPONENT_TYPES = [ 'schemas', @@ -26,11 +27,16 @@ const MERGEABLE_COMPONENT_TYPES = [ ] as const; export function mergeSharedComponents( - bundledDocuments: ResolvedDocument[] + bundledDocuments: ResolvedDocument[], + options: MergeOptions ): OpenAPIV3.ComponentsObject { const mergedComponents: Record = {}; for (const componentsType of MERGEABLE_COMPONENT_TYPES) { + if (options.skipSecurity && componentsType === 'securitySchemes') { + continue; + } + const mergedTypedComponents = mergeObjects(bundledDocuments, `/components/${componentsType}`); if (Object.keys(mergedTypedComponents).length === 0) { diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_tags.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_tags.ts index e1b8411538deb..3eeb555359df3 100644 --- a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_tags.ts +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_tags.ts @@ -19,5 +19,13 @@ export function mergeTags( const merged = mergeArrays(tagsArrayOfArrays); - return merged.length > 0 ? merged : undefined; + if (merged.length === 0) { + return; + } + + // To streamline API endpoints categorization it's expected that + // tags are sorted alphabetically by name + merged.sort((a, b) => a.name.localeCompare(b.name)); + + return merged; } diff --git a/packages/kbn-openapi-bundler/src/bundler/process_document/document_processors/namespace_components.ts b/packages/kbn-openapi-bundler/src/bundler/process_document/document_processors/namespace_components.ts index 01ef116082fe1..76b144ef0804d 100644 --- a/packages/kbn-openapi-bundler/src/bundler/process_document/document_processors/namespace_components.ts +++ b/packages/kbn-openapi-bundler/src/bundler/process_document/document_processors/namespace_components.ts @@ -10,6 +10,7 @@ import { extractByJsonPointer } from '../../../utils/extract_by_json_pointer'; import { isPlainObjectType } from '../../../utils/is_plain_object_type'; import { parseRef } from '../../../utils/parse_ref'; import { DocumentNodeProcessor } from './types/document_node_processor'; +import { isLocalRef } from './utils/is_local_ref'; /** * Creates a node processor to prefix possibly conflicting components and security requirements @@ -58,6 +59,23 @@ export function createNamespaceComponentsProcessor(pointer: string): DocumentNod // `components.securitySchemes`. It means items in `security` implicitly reference // `components.securitySchemes` items which should be handled. onNodeLeave(node, context) { + // Handle mappings + if (context.parentKey === 'mapping' && isPlainObjectType(node)) { + for (const key of Object.keys(node)) { + const maybeRef = node[key]; + + if (typeof maybeRef !== 'string' || !isLocalRef(maybeRef)) { + throw new Error( + `Expected mappings to have local references but got "${maybeRef}" in ${JSON.stringify( + node + )}` + ); + } + + node[key] = decorateRefBaseName(maybeRef, namespace); + } + } + if ('security' in node && Array.isArray(node.security)) { for (const securityRequirements of node.security) { prefixObjectKeys(securityRequirements); diff --git a/packages/kbn-openapi-bundler/src/bundler/process_document/document_processors/utils/is_local_ref.ts b/packages/kbn-openapi-bundler/src/bundler/process_document/document_processors/utils/is_local_ref.ts new file mode 100644 index 0000000000000..8e3caa8e9deb8 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/process_document/document_processors/utils/is_local_ref.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export function isLocalRef(ref: string): boolean { + return ref.startsWith('#/'); +} diff --git a/packages/kbn-openapi-bundler/src/openapi_bundler.ts b/packages/kbn-openapi-bundler/src/openapi_bundler.ts index 90382150400dd..44bca89194507 100644 --- a/packages/kbn-openapi-bundler/src/openapi_bundler.ts +++ b/packages/kbn-openapi-bundler/src/openapi_bundler.ts @@ -7,8 +7,6 @@ */ import chalk from 'chalk'; -import { isUndefined, omitBy } from 'lodash'; -import { OpenAPIV3 } from 'openapi-types'; import { basename, dirname } from 'path'; import { bundleDocument, SkipException } from './bundler/bundle_document'; import { mergeDocuments } from './bundler/merge_documents'; @@ -19,6 +17,8 @@ import { writeDocuments } from './utils/write_documents'; import { ResolvedDocument } from './bundler/ref_resolver/resolved_document'; import { resolveGlobs } from './utils/resolve_globs'; import { DEFAULT_BUNDLING_PROCESSORS, withIncludeLabelsProcessor } from './bundler/processor_sets'; +import { PrototypeDocument } from './prototype_document'; +import { validatePrototypeDocument } from './validate_prototype_document'; export interface BundlerConfig { sourceGlob: string; @@ -27,8 +27,15 @@ export interface BundlerConfig { } interface BundleOptions { + /** + * OpenAPI document itself or path to the document + */ + prototypeDocument?: PrototypeDocument | string; + /** + * When specified the produced bundle will contain only + * operations objects with matching labels + */ includeLabels?: string[]; - specInfo?: Omit, 'version'>; } export const bundle = async ({ @@ -36,6 +43,10 @@ export const bundle = async ({ outputFilePath = 'bundled-{version}.schema.yaml', options, }: BundlerConfig) => { + const prototypeDocument = options?.prototypeDocument + ? await validatePrototypeDocument(options?.prototypeDocument) + : undefined; + logger.debug(chalk.bold(`Bundling API route schemas`)); logger.debug(`👀 Searching for source files in ${chalk.underline(sourceGlob)}`); @@ -56,22 +67,21 @@ export const bundle = async ({ logger.success(`Processed ${bundledDocuments.length} schemas`); - const blankOasFactory = (oasVersion: string, apiVersion: string) => + const blankOasDocumentFactory = (oasVersion: string, apiVersion: string) => createBlankOpenApiDocument(oasVersion, { - version: apiVersion, - title: options?.specInfo?.title ?? 'Bundled OpenAPI specs', - ...omitBy( - { - description: options?.specInfo?.description, - termsOfService: options?.specInfo?.termsOfService, - contact: options?.specInfo?.contact, - license: options?.specInfo?.license, - }, - isUndefined - ), + info: prototypeDocument?.info + ? { ...DEFAULT_INFO, ...prototypeDocument.info, version: apiVersion } + : { ...DEFAULT_INFO, version: apiVersion }, + servers: prototypeDocument?.servers, + security: prototypeDocument?.security, + components: { + securitySchemes: prototypeDocument?.components?.securitySchemes, + }, }); - const resultDocumentsMap = await mergeDocuments(bundledDocuments, blankOasFactory, { + const resultDocumentsMap = await mergeDocuments(bundledDocuments, blankOasDocumentFactory, { splitDocumentsByVersion: true, + skipServers: Boolean(prototypeDocument?.servers), + skipSecurity: Boolean(prototypeDocument?.security), }); await writeDocuments(resultDocumentsMap, outputFilePath); @@ -130,3 +140,7 @@ function filterOutSkippedDocuments( return processedDocuments; } + +const DEFAULT_INFO = { + title: 'Bundled OpenAPI specs', +} as const; diff --git a/packages/kbn-openapi-bundler/src/openapi_merger.ts b/packages/kbn-openapi-bundler/src/openapi_merger.ts index 773edb816c472..d0f532ca47d06 100644 --- a/packages/kbn-openapi-bundler/src/openapi_merger.ts +++ b/packages/kbn-openapi-bundler/src/openapi_merger.ts @@ -7,7 +7,7 @@ */ import chalk from 'chalk'; -import { OpenAPIV3 } from 'openapi-types'; + import { mergeDocuments } from './bundler/merge_documents'; import { logger } from './logger'; import { createBlankOpenApiDocument } from './bundler/merge_documents/create_blank_oas_document'; @@ -16,16 +16,20 @@ import { writeDocuments } from './utils/write_documents'; import { resolveGlobs } from './utils/resolve_globs'; import { bundleDocument } from './bundler/bundle_document'; import { withNamespaceComponentsProcessor } from './bundler/processor_sets'; +import { PrototypeDocument } from './prototype_document'; +import { validatePrototypeDocument } from './validate_prototype_document'; export interface MergerConfig { sourceGlobs: string[]; outputFilePath: string; - options?: { - mergedSpecInfo?: Partial; - conflictsResolution?: { - prependComponentsWith: 'title'; - }; - }; + options?: MergerOptions; +} + +interface MergerOptions { + /** + * OpenAPI document itself or path to the document + */ + prototypeDocument?: PrototypeDocument | string; } export const merge = async ({ @@ -37,6 +41,10 @@ export const merge = async ({ throw new Error('As minimum one source glob is expected'); } + const prototypeDocument = options?.prototypeDocument + ? await validatePrototypeDocument(options?.prototypeDocument) + : undefined; + logger.info(chalk.bold(`Merging OpenAPI specs`)); logger.info( `👀 Searching for source files in ${sourceGlobs @@ -55,13 +63,18 @@ export const merge = async ({ const blankOasDocumentFactory = (oasVersion: string) => createBlankOpenApiDocument(oasVersion, { - title: 'Merged OpenAPI specs', - version: 'not specified', - ...(options?.mergedSpecInfo ?? {}), + info: prototypeDocument?.info ? { ...DEFAULT_INFO, ...prototypeDocument.info } : DEFAULT_INFO, + servers: prototypeDocument?.servers, + security: prototypeDocument?.security, + components: { + securitySchemes: prototypeDocument?.components?.securitySchemes, + }, }); const resultDocumentsMap = await mergeDocuments(bundledDocuments, blankOasDocumentFactory, { splitDocumentsByVersion: false, + skipServers: Boolean(prototypeDocument?.servers), + skipSecurity: Boolean(prototypeDocument?.security), }); // Only one document is expected when `splitDocumentsByVersion` is set to `false` const mergedDocument = Array.from(resultDocumentsMap.values())[0]; @@ -83,3 +96,8 @@ async function bundleDocuments(schemaFilePaths: string[]): Promise; + servers?: OpenAPIV3.ServerObject[]; + security?: OpenAPIV3.SecurityRequirementObject[]; + components?: { + securitySchemes: Record; + }; +} diff --git a/packages/kbn-openapi-bundler/src/utils/read_document.ts b/packages/kbn-openapi-bundler/src/utils/read_document.ts index 019f5103cf621..49476c134e91f 100644 --- a/packages/kbn-openapi-bundler/src/utils/read_document.ts +++ b/packages/kbn-openapi-bundler/src/utils/read_document.ts @@ -7,37 +7,48 @@ */ import fs from 'fs/promises'; -import { load } from 'js-yaml'; import { basename, extname } from 'path'; +import { load } from 'js-yaml'; import chalk from 'chalk'; import { logger } from '../logger'; +import { isPlainObjectType } from './is_plain_object_type'; export async function readDocument(documentPath: string): Promise> { - const extension = extname(documentPath); - logger.debug(`Reading ${chalk.bold(basename(documentPath))}`); + const maybeDocument = await readFile(documentPath); + + if (!isPlainObjectType(maybeDocument)) { + throw new Error(`File at ${chalk.bold(documentPath)} is not valid OpenAPI document`); + } + + return maybeDocument; +} + +async function readFile(filePath: string): Promise { + const extension = extname(filePath); + switch (extension) { case '.yaml': case '.yml': - return await readYamlDocument(documentPath); + return await readYamlFile(filePath); case '.json': - return await readJsonDocument(documentPath); + return await readJsonFile(filePath); default: throw new Error(`${extension} files are not supported`); } } -async function readYamlDocument(filePath: string): Promise> { +async function readYamlFile(filePath: string): Promise> { // Typing load's result to Record is optimistic as we can't be sure // there is object inside a yaml file. We don't have this validation layer so far // but using JSON Schemas here should mitigate this problem. return load(await fs.readFile(filePath, { encoding: 'utf8' })); } -export async function readJsonDocument(filePath: string): Promise> { +async function readJsonFile(filePath: string): Promise> { // Typing load's result to Record is optimistic as we can't be sure // there is object inside a yaml file. We don't have this validation layer so far // but using JSON Schemas here should mitigate this problem. diff --git a/packages/kbn-openapi-bundler/src/utils/write_documents.ts b/packages/kbn-openapi-bundler/src/utils/write_documents.ts index 40311bc7d61e1..f0834ebb5ca00 100644 --- a/packages/kbn-openapi-bundler/src/utils/write_documents.ts +++ b/packages/kbn-openapi-bundler/src/utils/write_documents.ts @@ -45,5 +45,5 @@ function getVersionedOutputFilePath(outputFilePath: string, version: string): st const filename = basename(outputFilePath); - return outputFilePath.replace(filename, `${version}-${filename}`); + return outputFilePath.replace(filename, `${version}_${filename}`); } diff --git a/packages/kbn-openapi-bundler/src/validate_prototype_document.ts b/packages/kbn-openapi-bundler/src/validate_prototype_document.ts new file mode 100644 index 0000000000000..82bfc0b0a6097 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/validate_prototype_document.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import chalk from 'chalk'; +import { PrototypeDocument } from './prototype_document'; +import { readDocument } from './utils/read_document'; + +/** + * Validates that passed `prototypeDocument` fulfills the requirements. + * + * In particular security requirements must be specified via `security` and + * `components.securitySchemes` properties. + * + */ +export async function validatePrototypeDocument( + prototypeDocumentOrString: PrototypeDocument | string +): Promise { + const prototypeDocument: PrototypeDocument | undefined = + typeof prototypeDocumentOrString === 'string' + ? await readDocument(prototypeDocumentOrString) + : prototypeDocumentOrString; + + if (prototypeDocument.security && !prototypeDocument.components?.securitySchemes) { + throw new Error( + `Prototype document must contain ${chalk.bold( + 'components.securitySchemes' + )} when security requirements are specified` + ); + } + + if (prototypeDocument.components?.securitySchemes && !prototypeDocument.security) { + throw new Error( + `Prototype document must have ${chalk.bold('security')} defined ${chalk.bold( + 'components.securitySchemes' + )} are specified` + ); + } + + return prototypeDocument; +} diff --git a/packages/kbn-openapi-bundler/tests/bundler/result_overrides/security.test.ts b/packages/kbn-openapi-bundler/tests/bundler/result_overrides/security.test.ts new file mode 100644 index 0000000000000..12f3f14ac45c2 --- /dev/null +++ b/packages/kbn-openapi-bundler/tests/bundler/result_overrides/security.test.ts @@ -0,0 +1,403 @@ +/* + * 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 chalk from 'chalk'; +import { OpenAPIV3 } from 'openapi-types'; +import { createOASDocument } from '../../create_oas_document'; +import { bundleSpecs } from '../bundle_specs'; + +describe('OpenAPI Bundler - with security requirements overrides', () => { + describe('enabled', () => { + it('throws an error when security requirements are specified without components security schemes', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: {}, + }, + }, + }, + }); + + await expect( + bundleSpecs( + { + 1: spec1, + }, + { + prototypeDocument: { + security: [{ ShouldBeUsedSecurityRequirement: [] }], + }, + } + ) + ).rejects.toThrowError( + `Prototype document must contain ${chalk.bold( + 'components.securitySchemes' + )} when security requirements are specified` + ); + }); + + it('throws an error when components security schemes are specified without security requirements', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: {}, + }, + }, + }, + }); + + await expect( + bundleSpecs( + { + 1: spec1, + }, + { + prototypeDocument: { + components: { + securitySchemes: { + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }, + } + ) + ).rejects.toThrowError( + `Prototype document must have ${chalk.bold('security')} defined ${chalk.bold( + 'components.securitySchemes' + )} are specified` + ); + }); + + it('overrides root level `security`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: [{ SomeSecurityRequirement: [] }], + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: [{ AnotherSecurityRequirement: [] }, { AdditionalSecurityRequirement: [] }], + }); + + const [bundledSpec] = Object.values( + await bundleSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + security: [{ ShouldBeUsedSecurityRequirement: [] }], + components: { + securitySchemes: { + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }, + } + ) + ); + + expect(bundledSpec.security).toEqual([{ ShouldBeUsedSecurityRequirement: [] }]); + expect(bundledSpec.components?.securitySchemes).toEqual({ + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }); + }); + + it('drops operation level security requirements', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: [{ SomeSecurityRequirement: [] }], + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: [{ AnotherSecurityRequirement: [] }, { AdditionalSecurityRequirement: [] }], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + security: [{ ShouldBeUsedSecurityRequirement: [] }], + components: { + securitySchemes: { + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }, + } + ) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.security).toBeUndefined(); + expect(bundledSpec.paths['/api/another_api']?.get?.security).toBeUndefined(); + }); + }); + + describe('disabled', () => { + it('bundles root level security requirements', async () => { + const spec1Security = [{ SomeSecurityRequirement: [] }]; + const spec1SecuritySchemes = { + SomeSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + } as const; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: spec1Security, + components: { + securitySchemes: spec1SecuritySchemes, + }, + }); + const spec2Security: OpenAPIV3.SecurityRequirementObject[] = [ + { AnotherSecurityRequirement: [] }, + { AdditionalSecurityRequirement: [] }, + ]; + const spec2SecuritySchemes = { + AnotherSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + AdditionalSecurityRequirement: { + type: 'apiKey', + name: 'apiKey', + in: 'header', + }, + } as const; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: spec2Security, + components: { + securitySchemes: spec2SecuritySchemes, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.security).toEqual( + expect.arrayContaining([...spec1Security, ...spec2Security]) + ); + expect(bundledSpec.components?.securitySchemes).toMatchObject({ + ...spec1SecuritySchemes, + ...spec2SecuritySchemes, + }); + }); + + it('bundles operation level security requirements', async () => { + const spec1Security = [{ SomeSecurityRequirement: [] }]; + const spec1SecuritySchemes = { + SomeSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + } as const; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: spec1Security, + }, + }, + }, + components: { + securitySchemes: spec1SecuritySchemes, + }, + }); + const spec2Security: OpenAPIV3.SecurityRequirementObject[] = [ + { AnotherSecurityRequirement: [] }, + { AdditionalSecurityRequirement: [] }, + ]; + const spec2SecuritySchemes = { + AnotherSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + AdditionalSecurityRequirement: { + type: 'apiKey', + name: 'apiKey', + in: 'header', + }, + } as const; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: spec2Security, + }, + }, + }, + components: { + securitySchemes: spec2SecuritySchemes, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.security).toEqual(spec1Security); + expect(bundledSpec.paths['/api/another_api']?.get?.security).toEqual(spec2Security); + expect(bundledSpec.components?.securitySchemes).toMatchObject({ + ...spec1SecuritySchemes, + ...spec2SecuritySchemes, + }); + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/tests/bundler/result_overrides/servers.test.ts b/packages/kbn-openapi-bundler/tests/bundler/result_overrides/servers.test.ts new file mode 100644 index 0000000000000..da22e2dcfc74c --- /dev/null +++ b/packages/kbn-openapi-bundler/tests/bundler/result_overrides/servers.test.ts @@ -0,0 +1,409 @@ +/* + * 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 { createOASDocument } from '../../create_oas_document'; +import { bundleSpecs } from '../bundle_specs'; + +describe('OpenAPI Bundler - with `servers` overrides', () => { + describe('enabled', () => { + it('overrides root level `servers`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: [{ url: 'https://some-url' }], + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ], + }); + + const [bundledSpec] = Object.values( + await bundleSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + servers: [ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ], + }, + } + ) + ); + + expect(bundledSpec.servers).toEqual([ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ]); + }); + + it('drops path level `servers`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: [{ url: 'https://some-url' }], + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ], + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + servers: [ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ], + }, + } + ) + ); + + expect(bundledSpec.paths['/api/some_api']?.servers).toBeUndefined(); + expect(bundledSpec.paths['/api/another_api']?.servers).toBeUndefined(); + }); + + it('drops operation level `servers`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: [{ url: 'https://some-url' }], + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + servers: [ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ], + }, + } + ) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.servers).toBeUndefined(); + expect(bundledSpec.paths['/api/another_api']?.get?.servers).toBeUndefined(); + }); + }); + + describe('disabled', () => { + it('bundles root level `servers`', async () => { + const spec1Servers = [{ url: 'https://some-url' }]; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: spec1Servers, + }); + const spec2Servers = [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ]; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: spec2Servers, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + const DEFAULT_ENTRY = { + url: 'http://{kibana_host}:{port}', + variables: { + kibana_host: { + default: 'localhost', + }, + port: { + default: '5601', + }, + }, + }; + + expect(bundledSpec.servers).toEqual([DEFAULT_ENTRY, ...spec1Servers, ...spec2Servers]); + }); + + it('bundles path level `servers`', async () => { + const spec1Servers = [{ url: 'https://some-url' }]; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: spec1Servers, + }, + }, + }); + const spec2Servers = [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ]; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: spec2Servers, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.paths['/api/some_api']?.servers).toEqual(spec1Servers); + expect(bundledSpec.paths['/api/another_api']?.servers).toEqual(spec2Servers); + }); + + it('bundles operation level `servers`', async () => { + const spec1Servers = [{ url: 'https://some-url' }]; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: spec1Servers, + }, + }, + }, + }); + const spec2Servers = [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ]; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: spec2Servers, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.servers).toEqual(spec1Servers); + expect(bundledSpec.paths['/api/another_api']?.get?.servers).toEqual(spec2Servers); + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/tests/bundler/result_overrides/sort_tags.test.ts b/packages/kbn-openapi-bundler/tests/bundler/result_overrides/sort_tags.test.ts new file mode 100644 index 0000000000000..0e4a8e77e576b --- /dev/null +++ b/packages/kbn-openapi-bundler/tests/bundler/result_overrides/sort_tags.test.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { bundleSpecs } from '../bundle_specs'; +import { createOASDocument } from '../../create_oas_document'; + +describe('OpenAPI Bundler - sort tags', () => { + it('sorts tags in the result bundle', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: {}, + }, + }, + }, + tags: [ + { name: 'Some tag name', description: 'Some description' }, + { name: '1 tag', description: 'Some description' }, + ], + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + post: { + responses: {}, + }, + }, + }, + tags: [{ name: 'Another tag name', description: 'Another description' }], + }); + const spec3 = createOASDocument({ + paths: { + '/api/some_api': { + put: { + responses: {}, + }, + }, + }, + tags: [{ name: 'Spec3 tag name', description: 'Spec3 tag description' }], + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + 3: spec3, + }) + ); + + expect(bundledSpec.tags).toEqual([ + { name: '1 tag', description: 'Some description' }, + { name: 'Another tag name', description: 'Another description' }, + { name: 'Some tag name', description: 'Some description' }, + { name: 'Spec3 tag name', description: 'Spec3 tag description' }, + ]); + }); +}); diff --git a/packages/kbn-openapi-bundler/tests/create_oas_document.ts b/packages/kbn-openapi-bundler/tests/create_oas_document.ts index a16cef4119f03..2ce877ebe3524 100644 --- a/packages/kbn-openapi-bundler/tests/create_oas_document.ts +++ b/packages/kbn-openapi-bundler/tests/create_oas_document.ts @@ -15,6 +15,7 @@ export function createOASDocument(overrides: { components?: OpenAPIV3.ComponentsObject; servers?: OpenAPIV3.ServerObject[]; security?: OpenAPIV3.SecurityRequirementObject[]; + tags?: OpenAPIV3.TagObject[]; }): OpenAPIV3.Document { const document: OpenAPIV3.Document = { openapi: overrides.openapi ?? '3.0.3', @@ -39,5 +40,9 @@ export function createOASDocument(overrides: { document.security = overrides.security; } + if (overrides.tags) { + document.tags = overrides.tags; + } + return document; } diff --git a/packages/kbn-openapi-bundler/tests/merger/merging_specs_with_conflicting_components.test.ts b/packages/kbn-openapi-bundler/tests/merger/merging_specs_with_conflicting_components.test.ts index c77d2a08a644a..edf2b44725acf 100644 --- a/packages/kbn-openapi-bundler/tests/merger/merging_specs_with_conflicting_components.test.ts +++ b/packages/kbn-openapi-bundler/tests/merger/merging_specs_with_conflicting_components.test.ts @@ -708,4 +708,89 @@ describe('OpenAPI Merger - merging specs with conflicting components', () => { Spec2_SomeCallback: expect.anything(), }); }); + + it('prefixes discriminator mapping local references', async () => { + const spec1 = createOASDocument({ + info: { + title: 'Spec1', + version: '2023-10-31', + }, + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + oneOf: [ + { $ref: '#/components/schemas/Component1' }, + { $ref: '#/components/schemas/Component2' }, + ], + discriminator: { + propertyName: 'commonProp', + mapping: { + component1: '#/components/schemas/Component1', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + Component1: { + type: 'object', + properties: { + commonProp: { + type: 'string', + }, + extraProp1: { + type: 'boolean', + }, + }, + }, + Component2: { + type: 'object', + properties: { + commonProp: { + type: 'string', + }, + extraProp2: { + type: 'integer', + }, + }, + }, + }, + }, + }); + + const [mergedSpec] = Object.values( + await mergeSpecs({ + 1: spec1, + }) + ); + + expect(mergedSpec.paths['/api/some_api']?.get?.responses['200']).toMatchObject({ + content: { + 'application/json; Elastic-Api-Version=2023-10-31': { + schema: expect.objectContaining({ + discriminator: expect.objectContaining({ + mapping: { + component1: '#/components/schemas/Spec1_Component1', + }, + }), + }), + }, + }, + }); + expect(mergedSpec.components?.schemas).toMatchObject({ + Spec1_Component1: expect.anything(), + }); + }); }); diff --git a/packages/kbn-openapi-bundler/tests/merger/result_overrides/security.test.ts b/packages/kbn-openapi-bundler/tests/merger/result_overrides/security.test.ts new file mode 100644 index 0000000000000..f570416d48d75 --- /dev/null +++ b/packages/kbn-openapi-bundler/tests/merger/result_overrides/security.test.ts @@ -0,0 +1,415 @@ +/* + * 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 chalk from 'chalk'; +import { createOASDocument } from '../../create_oas_document'; +import { mergeSpecs } from '../merge_specs'; + +// Disable naming convention check due to tests on spec title prefixes +// like Spec1_Something which violates that rule +/* eslint-disable @typescript-eslint/naming-convention */ + +describe('OpenAPI Merger - with security requirements overrides', () => { + describe('enabled', () => { + it('throws an error when security requirements are specified without components security schemes', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: {}, + }, + }, + }, + }); + + await expect( + mergeSpecs( + { + 1: spec1, + }, + { + prototypeDocument: { + security: [{ ShouldBeUsedSecurityRequirement: [] }], + }, + } + ) + ).rejects.toThrowError( + `Prototype document must contain ${chalk.bold( + 'components.securitySchemes' + )} when security requirements are specified` + ); + }); + + it('throws an error when components security schemes are specified without security requirements', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: {}, + }, + }, + }, + }); + + await expect( + mergeSpecs( + { + 1: spec1, + }, + { + prototypeDocument: { + components: { + securitySchemes: { + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }, + } + ) + ).rejects.toThrowError( + `Prototype document must have ${chalk.bold('security')} defined ${chalk.bold( + 'components.securitySchemes' + )} are specified` + ); + }); + + it('overrides root level `security`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: [{ SomeSecurityRequirement: [] }], + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: [{ AnotherSecurityRequirement: [] }, { AdditionalSecurityRequirement: [] }], + }); + + const [bundledSpec] = Object.values( + await mergeSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + security: [{ ShouldBeUsedSecurityRequirement: [] }], + components: { + securitySchemes: { + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }, + } + ) + ); + + expect(bundledSpec.security).toEqual([{ ShouldBeUsedSecurityRequirement: [] }]); + expect(bundledSpec.components?.securitySchemes).toEqual({ + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }); + }); + + it('drops operation level security requirements', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: [{ SomeSecurityRequirement: [] }], + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: [{ AnotherSecurityRequirement: [] }, { AdditionalSecurityRequirement: [] }], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + security: [{ ShouldBeUsedSecurityRequirement: [] }], + components: { + securitySchemes: { + ShouldBeUsedSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }, + } + ) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.security).toBeUndefined(); + expect(bundledSpec.paths['/api/another_api']?.get?.security).toBeUndefined(); + }); + }); + + describe('disabled', () => { + it('bundles root level security requirements', async () => { + const spec1 = createOASDocument({ + info: { + title: 'Spec1', + }, + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: [{ SomeSecurityRequirement: [] }], + components: { + securitySchemes: { + SomeSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }); + const spec2 = createOASDocument({ + info: { + title: 'Spec2', + }, + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + security: [{ AnotherSecurityRequirement: [] }, { AdditionalSecurityRequirement: [] }], + components: { + securitySchemes: { + AnotherSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + AdditionalSecurityRequirement: { + type: 'apiKey', + name: 'apiKey', + in: 'header', + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.security).toEqual( + expect.arrayContaining([ + { Spec1_SomeSecurityRequirement: [] }, + { Spec2_AnotherSecurityRequirement: [] }, + { Spec2_AdditionalSecurityRequirement: [] }, + ]) + ); + expect(bundledSpec.components?.securitySchemes).toMatchObject({ + Spec1_SomeSecurityRequirement: expect.anything(), + Spec2_AnotherSecurityRequirement: expect.anything(), + Spec2_AdditionalSecurityRequirement: expect.anything(), + }); + }); + + it('bundles operation level security requirements', async () => { + const spec1 = createOASDocument({ + info: { + title: 'Spec1', + }, + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: [{ SomeSecurityRequirement: [] }], + }, + }, + }, + components: { + securitySchemes: { + SomeSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }); + const spec2 = createOASDocument({ + info: { + title: 'Spec2', + }, + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + security: [{ AnotherSecurityRequirement: [] }, { AdditionalSecurityRequirement: [] }], + }, + }, + }, + components: { + securitySchemes: { + AnotherSecurityRequirement: { + type: 'http', + scheme: 'basic', + }, + AdditionalSecurityRequirement: { + type: 'apiKey', + name: 'apiKey', + in: 'header', + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.security).toEqual([ + { Spec1_SomeSecurityRequirement: [] }, + ]); + expect(bundledSpec.paths['/api/another_api']?.get?.security).toEqual([ + { Spec2_AnotherSecurityRequirement: [] }, + { Spec2_AdditionalSecurityRequirement: [] }, + ]); + expect(bundledSpec.components?.securitySchemes).toMatchObject({ + Spec1_SomeSecurityRequirement: expect.anything(), + Spec2_AnotherSecurityRequirement: expect.anything(), + Spec2_AdditionalSecurityRequirement: expect.anything(), + }); + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/tests/merger/result_overrides/servers.test.ts b/packages/kbn-openapi-bundler/tests/merger/result_overrides/servers.test.ts new file mode 100644 index 0000000000000..0b2fe5a5ceb6c --- /dev/null +++ b/packages/kbn-openapi-bundler/tests/merger/result_overrides/servers.test.ts @@ -0,0 +1,409 @@ +/* + * 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 { createOASDocument } from '../../create_oas_document'; +import { mergeSpecs } from '../merge_specs'; + +describe('OpenAPI Merger - with `servers` overrides', () => { + describe('enabled', () => { + it('overrides root level `servers`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: [{ url: 'https://some-url' }], + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ], + }); + + const [bundledSpec] = Object.values( + await mergeSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + servers: [ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ], + }, + } + ) + ); + + expect(bundledSpec.servers).toEqual([ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ]); + }); + + it('drops path level `servers`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: [{ url: 'https://some-url' }], + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ], + }, + }, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + servers: [ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ], + }, + } + ) + ); + + expect(bundledSpec.paths['/api/some_api']?.servers).toBeUndefined(); + expect(bundledSpec.paths['/api/another_api']?.servers).toBeUndefined(); + }); + + it('drops operation level `servers`', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: [{ url: 'https://some-url' }], + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs( + { + 1: spec1, + 2: spec2, + }, + { + prototypeDocument: { + servers: [ + { url: 'https://should-be-used-url', description: 'Should be used description' }, + ], + }, + } + ) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.servers).toBeUndefined(); + expect(bundledSpec.paths['/api/another_api']?.get?.servers).toBeUndefined(); + }); + }); + + describe('disabled', () => { + it('bundles root level `servers`', async () => { + const spec1Servers = [{ url: 'https://some-url' }]; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: spec1Servers, + }); + const spec2Servers = [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ]; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + servers: spec2Servers, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + const DEFAULT_ENTRY = { + url: 'http://{kibana_host}:{port}', + variables: { + kibana_host: { + default: 'localhost', + }, + port: { + default: '5601', + }, + }, + }; + + expect(bundledSpec.servers).toEqual([DEFAULT_ENTRY, ...spec1Servers, ...spec2Servers]); + }); + + it('bundles path level `servers`', async () => { + const spec1Servers = [{ url: 'https://some-url' }]; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: spec1Servers, + }, + }, + }); + const spec2Servers = [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ]; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + servers: spec2Servers, + }, + }, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.paths['/api/some_api']?.servers).toEqual(spec1Servers); + expect(bundledSpec.paths['/api/another_api']?.servers).toEqual(spec2Servers); + }); + + it('bundles operation level `servers`', async () => { + const spec1Servers = [{ url: 'https://some-url' }]; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: spec1Servers, + }, + }, + }, + }); + const spec2Servers = [ + { url: 'https://another-url', description: 'some description' }, + { url: 'https://something-else-url', description: 'some description' }, + ]; + const spec2 = createOASDocument({ + paths: { + '/api/another_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + servers: spec2Servers, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await mergeSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.paths['/api/some_api']?.get?.servers).toEqual(spec1Servers); + expect(bundledSpec.paths['/api/another_api']?.get?.servers).toEqual(spec2Servers); + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/tests/merger/result_overrides/sort_tags.test.ts b/packages/kbn-openapi-bundler/tests/merger/result_overrides/sort_tags.test.ts new file mode 100644 index 0000000000000..1fa25fe59ecf1 --- /dev/null +++ b/packages/kbn-openapi-bundler/tests/merger/result_overrides/sort_tags.test.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { mergeSpecs } from '../merge_specs'; +import { createOASDocument } from '../../create_oas_document'; + +describe('OpenAPI Merger - sort tags', () => { + it('sorts tags in the result bundle', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: {}, + }, + }, + }, + tags: [ + { name: 'Some tag name', description: 'Some description' }, + { name: '1 tag', description: 'Some description' }, + ], + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + post: { + responses: {}, + }, + }, + }, + tags: [{ name: 'Another tag name', description: 'Another description' }], + }); + const spec3 = createOASDocument({ + paths: { + '/api/some_api': { + put: { + responses: {}, + }, + }, + }, + tags: [{ name: 'Spec3 tag name', description: 'Spec3 tag description' }], + }); + + const [mergedSpec] = Object.values( + await mergeSpecs({ + 1: spec1, + 2: spec2, + 3: spec3, + }) + ); + + expect(mergedSpec.tags).toEqual([ + { name: '1 tag', description: 'Some description' }, + { name: 'Another tag name', description: 'Another description' }, + { name: 'Some tag name', description: 'Some description' }, + { name: 'Spec3 tag name', description: 'Spec3 tag description' }, + ]); + }); +}); diff --git a/packages/kbn-plugin-check/kibana.jsonc b/packages/kbn-plugin-check/kibana.jsonc index 5081138fe5e2a..1f14120b75ba9 100644 --- a/packages/kbn-plugin-check/kibana.jsonc +++ b/packages/kbn-plugin-check/kibana.jsonc @@ -1,5 +1,5 @@ { - "type": "shared-common", + "type": "shared-server", "id": "@kbn/plugin-check", "owner": "@elastic/appex-sharedux" } diff --git a/packages/kbn-search-connectors/types/native_connectors.ts b/packages/kbn-search-connectors/types/native_connectors.ts index 6459bbdf20ff9..30ce2c790a2ec 100644 --- a/packages/kbn-search-connectors/types/native_connectors.ts +++ b/packages/kbn-search-connectors/types/native_connectors.ts @@ -4662,6 +4662,45 @@ export const NATIVE_CONNECTOR_DEFINITIONS: Record { it('should return original columns if fieldsMetadata is not provided', async () => { const columns = [ - { name: 'ecs.version', type: 'string' as DatatableColumnType }, - { name: 'field1', type: 'string' as DatatableColumnType }, - { name: 'field2', type: 'number' as DatatableColumnType }, + { name: 'ecs.version', type: 'keyword' as DatatableColumnType }, + { name: 'field1', type: 'text' as DatatableColumnType }, + { name: 'field2', type: 'double' as DatatableColumnType }, ]; const result = await getColumnsWithMetadata(columns); @@ -24,16 +24,16 @@ describe('getColumnsWithMetadata', () => { it('should return columns with metadata if both name and type match with ECS fields', async () => { const columns = [ - { name: 'ecs.field', type: 'string' as DatatableColumnType }, + { name: 'ecs.field', type: 'text' as DatatableColumnType }, { name: 'ecs.fakeBooleanField', type: 'boolean' as DatatableColumnType }, - { name: 'field2', type: 'number' as DatatableColumnType }, + { name: 'field2', type: 'double' as DatatableColumnType }, ]; const fieldsMetadata = { getClient: jest.fn().mockResolvedValue({ find: jest.fn().mockResolvedValue({ fields: { 'ecs.version': { description: 'ECS version field', type: 'keyword' }, - 'ecs.field': { description: 'ECS field description', type: 'keyword' }, + 'ecs.field': { description: 'ECS field description', type: 'text' }, 'ecs.fakeBooleanField': { description: 'ECS fake boolean field description', type: 'keyword', @@ -48,19 +48,19 @@ describe('getColumnsWithMetadata', () => { expect(result).toEqual([ { name: 'ecs.field', - type: 'string', + type: 'text', metadata: { description: 'ECS field description' }, }, { name: 'ecs.fakeBooleanField', type: 'boolean' }, - { name: 'field2', type: 'number' }, + { name: 'field2', type: 'double' }, ]); }); it('should handle keyword suffix correctly', async () => { const columns = [ - { name: 'ecs.version', type: 'string' as DatatableColumnType }, - { name: 'ecs.version.keyword', type: 'string' as DatatableColumnType }, - { name: 'field2', type: 'number' as DatatableColumnType }, + { name: 'ecs.version', type: 'keyword' as DatatableColumnType }, + { name: 'ecs.version.keyword', type: 'keyword' as DatatableColumnType }, + { name: 'field2', type: 'double' as DatatableColumnType }, ]; const fieldsMetadata = { getClient: jest.fn().mockResolvedValue({ @@ -75,13 +75,13 @@ describe('getColumnsWithMetadata', () => { const result = await getColumnsWithMetadata(columns, fieldsMetadata); expect(result).toEqual([ - { name: 'ecs.version', type: 'string', metadata: { description: 'ECS version field' } }, + { name: 'ecs.version', type: 'keyword', metadata: { description: 'ECS version field' } }, { name: 'ecs.version.keyword', - type: 'string', + type: 'keyword', metadata: { description: 'ECS version field' }, }, - { name: 'field2', type: 'number' }, + { name: 'field2', type: 'double' }, ]); }); }); diff --git a/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts b/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts index 687999350be0e..14198ab9d911a 100644 --- a/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts +++ b/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts @@ -7,7 +7,6 @@ */ import type { ESQLRealField } from '@kbn/esql-validation-autocomplete'; -import { esFieldTypeToKibanaFieldType } from '@kbn/field-types'; import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public'; import { chunk } from 'lodash'; @@ -45,11 +44,7 @@ export async function getColumnsWithMetadata( const metadata = fields.fields[removeKeywordSuffix(c.name)]; // Need to convert metadata's type (e.g. keyword) to ES|QL type (e.g. string) to check if they are the same - if ( - !metadata || - (metadata?.type && esFieldTypeToKibanaFieldType(metadata.type) !== c.type) - ) - return c; + if (!metadata || (metadata?.type && metadata.type !== c.type)) return c; return { ...c, metadata: { description: metadata.description }, diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index e2d3fd630999d..110e803fdf54e 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -468,7 +468,14 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ undefined, abortController ).result; - const columns = table?.columns.map((c) => ({ name: c.name, type: c.meta.type })) || []; + const columns = + table?.columns.map((c) => { + // Casting unsupported as unknown to avoid plethora of warnings + // Remove when addressed https://github.com/elastic/kibana/issues/189666 + if (!c.meta.esType || c.meta.esType === 'unsupported') + return { name: c.name, type: 'unknown' }; + return { name: c.name, type: c.meta.esType }; + }) || []; return await getRateLimitedColumnsWithMetadata(columns, fieldsMetadata); } catch (e) { // no action yet diff --git a/packages/kbn-text-based-editor/tsconfig.json b/packages/kbn-text-based-editor/tsconfig.json index 632dd05753459..c141fe2c2e8fa 100644 --- a/packages/kbn-text-based-editor/tsconfig.json +++ b/packages/kbn-text-based-editor/tsconfig.json @@ -28,7 +28,6 @@ "@kbn/shared-ux-markdown", "@kbn/fields-metadata-plugin", "@kbn/esql-validation-autocomplete", - "@kbn/field-types" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-unified-data-table/__mocks__/table_context.ts b/packages/kbn-unified-data-table/__mocks__/table_context.ts index 4a4a75b0fa9e5..9cf28f89eb810 100644 --- a/packages/kbn-unified-data-table/__mocks__/table_context.ts +++ b/packages/kbn-unified-data-table/__mocks__/table_context.ts @@ -15,6 +15,7 @@ import { DataTableContext } from '../src/table_context'; import { convertValueToString } from '../src/utils/convert_value_to_string'; import { buildDataTableRecord } from '@kbn/discover-utils'; import type { EsHitRecord } from '@kbn/discover-utils/types'; +import type { UseSelectedDocsState } from '../src/hooks/use_selected_docs'; const buildTableContext = (dataView: DataView, rows: EsHitRecord[]): DataTableContext => { const usedRows = rows.map((row) => { @@ -28,8 +29,9 @@ const buildTableContext = (dataView: DataView, rows: EsHitRecord[]): DataTableCo onFilter: jest.fn(), dataView, isDarkMode: false, - selectedDocs: [], - setSelectedDocs: jest.fn(), + selectedDocsState: buildSelectedDocsState([]), + pageIndex: 0, + pageSize: 10, valueToStringConverter: (rowIndex, columnId, options) => convertValueToString({ rowIndex, @@ -45,3 +47,21 @@ const buildTableContext = (dataView: DataView, rows: EsHitRecord[]): DataTableCo export const dataTableContextMock = buildTableContext(dataViewMock, esHitsMock); export const dataTableContextComplexMock = buildTableContext(dataViewComplexMock, esHitsComplex); + +export function buildSelectedDocsState(selectedDocIds: string[]): UseSelectedDocsState { + const selectedDocsSet = new Set(selectedDocIds); + + return { + isDocSelected: (docId: string) => selectedDocsSet.has(docId), + getCountOfSelectedDocs: (docIds: string[]) => + docIds.reduce((acc, docId) => (selectedDocsSet.has(docId) ? acc + 1 : acc), 0), + hasSelectedDocs: selectedDocsSet.size > 0, + selectedDocIds, + toggleDocSelection: jest.fn(), + selectAllDocs: jest.fn(), + selectMoreDocs: jest.fn(), + deselectSomeDocs: jest.fn(), + replaceSelectedDocs: jest.fn(), + clearAllSelectedDocs: jest.fn(), + }; +} diff --git a/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.test.tsx b/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.test.tsx index 5bf4c631cf5cf..63856a2c82ac2 100644 --- a/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.test.tsx +++ b/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.test.tsx @@ -52,7 +52,7 @@ const getDocById = (id: string) => docs.find((doc) => doc.raw._id === id); const renderCompareDocuments = ({ forceShowAllFields = false, }: { forceShowAllFields?: boolean } = {}) => { - const setSelectedDocs = jest.fn(); + const replaceSelectedDocs = jest.fn(); const getCompareDocuments = (props?: Partial) => ( ); const { rerender } = render(getCompareDocuments()); return { - setSelectedDocs, + replaceSelectedDocs, rerender: (props?: Partial) => rerender(getCompareDocuments(props)), }; }; @@ -146,10 +146,10 @@ describe('CompareDocuments', () => { }); it('should set selected docs when columns change', () => { - const { setSelectedDocs } = renderCompareDocuments(); + const { replaceSelectedDocs } = renderCompareDocuments(); const visibleColumns = ['fields_generated-id', '0', '1', '2']; mockDataGridProps?.columnVisibility.setVisibleColumns(visibleColumns); - expect(setSelectedDocs).toHaveBeenCalledWith(visibleColumns.slice(1)); + expect(replaceSelectedDocs).toHaveBeenCalledWith(visibleColumns.slice(1)); }); it('should force show all fields when prop is true', () => { diff --git a/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.tsx b/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.tsx index f04e8888f37a4..5679ac0f236b9 100644 --- a/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.tsx +++ b/packages/kbn-unified-data-table/src/components/compare_documents/compare_documents.tsx @@ -42,13 +42,13 @@ export interface CompareDocumentsProps { dataView: DataView; isPlainRecord: boolean; selectedFieldNames: string[]; - selectedDocs: string[]; + selectedDocIds: string[]; schemaDetectors: EuiDataGridSchemaDetector[]; forceShowAllFields: boolean; showFullScreenButton?: boolean; fieldFormats: FieldFormatsStart; getDocById: (id: string) => DataTableRecord | undefined; - setSelectedDocs: (selectedDocs: string[]) => void; + replaceSelectedDocs: (docIds: string[]) => void; setIsCompareActive: (isCompareActive: boolean) => void; additionalFieldGroups?: AdditionalFieldGroups; } @@ -69,13 +69,13 @@ const CompareDocuments = ({ isPlainRecord, selectedFieldNames, additionalFieldGroups, - selectedDocs, + selectedDocIds, schemaDetectors, forceShowAllFields, showFullScreenButton, fieldFormats, getDocById, - setSelectedDocs, + replaceSelectedDocs, setIsCompareActive, }: CompareDocumentsProps) => { // Memoize getDocById to ensure we don't lose access to the comparison docs if, for example, @@ -104,7 +104,7 @@ const CompareDocuments = ({ dataView, selectedFieldNames, additionalFieldGroups, - selectedDocs, + selectedDocIds, showAllFields: Boolean(forceShowAllFields || showAllFields), showMatchingValues: Boolean(showMatchingValues), getDocById: memoizedGetDocById, @@ -113,25 +113,25 @@ const CompareDocuments = ({ wrapper, isPlainRecord, fieldColumnId, - selectedDocs, + selectedDocIds, getDocById: memoizedGetDocById, - setSelectedDocs, + replaceSelectedDocs, }); const comparisonColumnVisibility = useMemo( () => ({ visibleColumns: comparisonColumns.map(({ id: columnId }) => columnId), setVisibleColumns: (visibleColumns) => { const [_fieldColumnId, ...newSelectedDocs] = visibleColumns; - setSelectedDocs(newSelectedDocs); + replaceSelectedDocs(newSelectedDocs); }, }), - [comparisonColumns, setSelectedDocs] + [comparisonColumns, replaceSelectedDocs] ); const additionalControls = useMemo( () => ( { - const selectedDocs = ['0', '1', '2']; + const selectedDocIds = ['0', '1', '2']; const Wrapper = () => { const [showDiff, setShowDiff] = useState(true); const [diffMode, setDiffMode] = useState('basic'); @@ -34,7 +34,7 @@ const renderComparisonControls = ({ screen.getByText( - `Comparing ${selectedDocs.length} ${isPlainRecord ? 'results' : 'documents'}` + `Comparing ${selectedDocIds.length} ${isPlainRecord ? 'results' : 'documents'}` ), getComparisonSettingsButton, clickComparisonSettingsButton: () => userEvent.click(getComparisonSettingsButton()), diff --git a/packages/kbn-unified-data-table/src/components/compare_documents/comparison_controls.tsx b/packages/kbn-unified-data-table/src/components/compare_documents/comparison_controls.tsx index 48c4f11960e57..61f8009bca584 100644 --- a/packages/kbn-unified-data-table/src/components/compare_documents/comparison_controls.tsx +++ b/packages/kbn-unified-data-table/src/components/compare_documents/comparison_controls.tsx @@ -30,7 +30,7 @@ import type { DocumentDiffMode } from './types'; export interface ComparisonControlsProps { isPlainRecord?: boolean; - selectedDocs: string[]; + selectedDocIds: string[]; showDiff: boolean | undefined; diffMode: DocumentDiffMode | undefined; showDiffDecorations: boolean | undefined; @@ -47,7 +47,7 @@ export interface ComparisonControlsProps { export const ComparisonControls = ({ isPlainRecord, - selectedDocs, + selectedDocIds, showDiff, diffMode, showDiffDecorations, @@ -72,13 +72,13 @@ export const ComparisonControls = ({ ) : ( )} diff --git a/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx b/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx index 636d5a1269bf7..71604adf1f004 100644 --- a/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx +++ b/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx @@ -55,7 +55,7 @@ const renderComparisonCellValue = (props: Partial = dataView: dataViewWithTimefieldMock, comparisonFields: ['message', 'extension', 'bytes'], fieldColumnId, - selectedDocs: ['0', '1', '2'], + selectedDocIds: ['0', '1', '2'], diffMode: undefined, fieldFormats: fieldFormatsMock, getDocById, @@ -408,7 +408,7 @@ describe('useComparisonCellValue', () => { expect(calculateDiff).toHaveBeenCalledTimes(2); renderComparisonCell(cellProps2); expect(calculateDiff).toHaveBeenCalledTimes(2); - rerender({ diffMode: 'words', selectedDocs: ['1', '2', '0'] }); + rerender({ diffMode: 'words', selectedDocIds: ['1', '2', '0'] }); const cellProps3 = { ...cellProps1, columnId: '2', @@ -425,7 +425,7 @@ describe('useComparisonCellValue', () => { expect(calculateDiff).toHaveBeenCalledTimes(4); renderComparisonCell(cellProps4); expect(calculateDiff).toHaveBeenCalledTimes(4); - rerender({ diffMode: 'lines', selectedDocs: ['2', '0', '1'] }); + rerender({ diffMode: 'lines', selectedDocIds: ['2', '0', '1'] }); const cellProps5 = { ...cellProps1, columnId: '0', diff --git a/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.tsx b/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.tsx index 7b7e378e8dbe0..f5eddf807a89e 100644 --- a/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.tsx +++ b/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.tsx @@ -39,7 +39,7 @@ export interface UseComparisonCellValueProps { dataView: DataView; comparisonFields: string[]; fieldColumnId: string; - selectedDocs: string[]; + selectedDocIds: string[]; diffMode: DocumentDiffMode | undefined; fieldFormats: FieldFormatsStart; getDocById: (id: string) => DataTableRecord | undefined; @@ -50,13 +50,13 @@ export const useComparisonCellValue = ({ dataView, comparisonFields, fieldColumnId, - selectedDocs, + selectedDocIds, diffMode, fieldFormats, getDocById, additionalFieldGroups, }: UseComparisonCellValueProps) => { - const baseDocId = selectedDocs[0]; + const baseDocId = selectedDocIds[0]; const baseDoc = useMemo(() => getDocById(baseDocId)?.flattened, [baseDocId, getDocById]); const [calculateDiffMemoized] = useState(() => createCalculateDiffMemoized()); @@ -92,7 +92,7 @@ export const useComparisonCellValue = ({ ); }; -type CellValueProps = Omit & +type CellValueProps = Omit & EuiDataGridCellValueElementProps & { baseDocId: string; baseDoc: DataTableRecord['flattened'] | undefined; diff --git a/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_columns.test.tsx b/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_columns.test.tsx index c6df0f7fabcb6..212d4a04498a9 100644 --- a/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_columns.test.tsx +++ b/packages/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_columns.test.tsx @@ -78,7 +78,7 @@ const docs = generateEsHits(dataViewWithTimefieldMock, 4).map((hit) => const defaultGetDocById = (id: string) => docs.find((doc) => doc.raw._id === id); const fieldColumnId = 'fieldColumnId'; -const selectedDocs = ['0', '1', '2', '3']; +const selectedDocIds = ['0', '1', '2', '3']; const renderColumns = ({ wrapperWidth, @@ -93,7 +93,7 @@ const renderColumns = ({ if (wrapperWidth) { Object.defineProperty(wrapper, 'offsetWidth', { value: wrapperWidth }); } - const setSelectedDocs = jest.fn(); + const replaceSelectedDocs = jest.fn(); const { result: { current: columns }, } = renderHook(() => @@ -101,17 +101,17 @@ const renderColumns = ({ wrapper, isPlainRecord, fieldColumnId, - selectedDocs, + selectedDocIds, getDocById, - setSelectedDocs, + replaceSelectedDocs, }) ); - return { columns, setSelectedDocs }; + return { columns, replaceSelectedDocs }; }; describe('useComparisonColumns', () => { it('should return comparison columns', () => { - const { columns, setSelectedDocs } = renderColumns(); + const { columns, replaceSelectedDocs } = renderColumns(); expect(columns).toEqual([ { id: fieldColumnId, @@ -123,17 +123,17 @@ describe('useComparisonColumns', () => { }, getComparisonColumn({ column: { - id: selectedDocs[0], + id: selectedDocIds[0], display: expect.anything(), - displayAsText: `Pinned document: ${selectedDocs[0]}`, + displayAsText: `Pinned document: ${selectedDocIds[0]}`, }, includeRemoveAction: true, }), getComparisonColumn({ column: { - id: selectedDocs[1], - display: selectedDocs[1], - displayAsText: `Comparison document: ${selectedDocs[1]}`, + id: selectedDocIds[1], + display: selectedDocIds[1], + displayAsText: `Comparison document: ${selectedDocIds[1]}`, actions: { showMoveRight: true, }, @@ -143,9 +143,9 @@ describe('useComparisonColumns', () => { }), getComparisonColumn({ column: { - id: selectedDocs[2], - display: selectedDocs[2], - displayAsText: `Comparison document: ${selectedDocs[2]}`, + id: selectedDocIds[2], + display: selectedDocIds[2], + displayAsText: `Comparison document: ${selectedDocIds[2]}`, actions: { showMoveLeft: true, showMoveRight: true, @@ -156,9 +156,9 @@ describe('useComparisonColumns', () => { }), getComparisonColumn({ column: { - id: selectedDocs[3], - display: selectedDocs[3], - displayAsText: `Comparison document: ${selectedDocs[3]}`, + id: selectedDocIds[3], + display: selectedDocIds[3], + displayAsText: `Comparison document: ${selectedDocIds[3]}`, actions: { showMoveLeft: true, }, @@ -192,17 +192,17 @@ describe('useComparisonColumns', () => { const removeAction = actions.additional?.[1].onClick; render(